r - 与唯一的 observeEvent 相关联的 actionButton 的动态数量

标签 r shiny

我想生成动态数量的 actionButton,然后让每个生成的按钮将其编号打印到控制台。到目前为止,这是我最好的尝试,但我仍然无法为前 10 个按钮中的每个按钮获取 observeEvent 以识别按钮点击。如何将按钮绑定(bind)到观察事件?

library(shiny)

ui <- basicPage(
  fluidRow(
    actionButton(inputId = "add_button",
                 label = "Add Button")
    ),
  uiOutput("more_buttons")
)

server <- function(input, output){

  rvs <- reactiveValues(buttons = list(actionButton(inputId = "button1",
                                               label = 1)))

  observeEvent(eventExpr = input$add_button,
               handlerExpr = {
                 len <- length(rvs$buttons) + 1
                 rvs$buttons[[len]] <- actionButton(inputId = paste0("button",len),
                                             label = len)
               })

  output$more_buttons <- renderUI({
    do.call(fluidRow, rvs$buttons)
  })

  # This is the part that doesn't work
  for(ii in 1:10){
    observeEvent(eventExpr = input[[paste0("button",ii)]],
                 handlerExpr = print(ii))
  }

}

shinyApp(ui, server)

最佳答案

你真的很接近,只需包装observeEvent部分在本地。

library(shiny)

ui <- basicPage(
  fluidRow(
    actionButton(inputId = "add_button",
                 label = "Add Button")
  ),
  uiOutput("more_buttons")
)

server <- function(input, output){

  rvs      <- reactiveValues(buttons = list(actionButton(inputId = "button1",
                                                    label = 1)))

  observeEvent(eventExpr = input$add_button,
               handlerExpr = {
                 len      <- length(rvs$buttons) + 1
                 rvs$buttons[[len]] <- actionButton(inputId = paste0("button",len),
                                                    label = len)
               })

  output$more_buttons <- renderUI({
    do.call(fluidRow, rvs$buttons)
  })

  observeEvent(rvs$buttons,{
    for(ii in 1:length(rvs$buttons)){
      local({
        i <- ii
        observeEvent(eventExpr = input[[paste0("button",i)]],
                     handlerExpr = {print(sprintf("You clicked btn number %d",i))})
      })
    }
  })

}

shinyApp(ui, server)

关于r - 与唯一的 observeEvent 相关联的 actionButton 的动态数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34157684/

相关文章:

r - 将列与 R 中的向量进行比较

R Shiny Leaflet addLegend() 指定标签顺序

r - 如何使用函数参数而不在函数体中提及它?

r - 当输入相互依赖时,如何防止输出运行两次?

r - 将一些 Shiny 的应用程序组合到一个 Shiny 的仪表板上

javascript - 在图像 R Shiny 上绘制矩形的浏览器友好方式

r - 在 R : How to subtract/divide rows in same data frame 中

r - 更改基本几何图中的颜色

R Shiny - 重置 Shiny 树节点选择

R Shiny : fast reactive image display