r - Capture the label of an actionButton once it is clicked -
is possible capture label of actionbutton once clicked?
imagine have 3 buttons on ui.r , depending on 1 click want perform different action on server.r.
one caveat buttons created dynamically on server.r dynamic labels (thus necessity of capturing label on click)
thanks
1) button clicked last user?
to answer can user observeevent function , setting a variable using reactivevalues function. make sure update libraries , work in latest version of r (version 3.1.3) shiny dependant on version. working on windows can follow example on how update here
rm(list = ls()) library(shiny) ui =fluidpage( sidebarpanel( textinput("sample1", "name1", value = "a"), textinput("sample2", "name2", value = "b"), textinput("sample3", "name3", value = "c"), div(style="display:inline-block",uioutput("my_button1")), div(style="display:inline-block",uioutput("my_button2")), div(style="display:inline-block",uioutput("my_button3"))), mainpanel(textoutput("text1")) ) server = function(input, output, session){ output$my_button1 <- renderui({actionbutton("action1", label = input$sample1)}) output$my_button2 <- renderui({actionbutton("action2", label = input$sample2)}) output$my_button3 <- renderui({actionbutton("action3", label = input$sample3)}) my_clicks <- reactivevalues(data = null) observeevent(input$action1, { my_clicks$data <- input$sample1 }) observeevent(input$action2, { my_clicks$data <- input$sample2 }) observeevent(input$action3, { my_clicks$data <- input$sample3 }) output$text1 <- rendertext({ if (is.null(my_clicks$data)) return() my_clicks$data }) } runapp(list(ui = ui, server = server)) 2) save clicks further manipulation below
here's small example based on work of jdharrison shiny ui: save changes in inputs , shinystorage package.
rm(list = ls()) #devtools::install_github("johndharrison/shinystorage") library(shinystorage) library(shiny) my_clicks <- null ui =fluidpage( # addss(), sidebarpanel( textinput("sample_text", "test", value = "0"), uioutput("my_button")), mainpanel(uioutput("text1")) ) server = function(input, output, session){ ss <- shinystore(session = session) output$my_button <- renderui({ actionbutton("action", label = input$sample_text) }) observe({ if(!is.null(input$sample_text)){ if(input$sample_text != ""){ ss$set("myvar", input$sample_text) } } }) output$text1 <- renderui({ input$action myvar <- ss$get("myvar") if(is.null(myvar)){ textinput("text1", "you button name") }else{ textinput("text1", "you button name", myvar) } }) } runapp(list(ui = ui, server = server))
Comments
Post a Comment