闪亮,两个动作按钮,它只响应第二个按钮而不响应第一个按钮

Posted

技术标签:

【中文标题】闪亮,两个动作按钮,它只响应第二个按钮而不响应第一个按钮【英文标题】:Shiny, two action buttons, it only responds to the second button and not to the first button 【发布时间】:2020-10-28 11:12:30 【问题描述】:

在 R Shiny 中告诉我,有两个操作按钮。我想根据我按下的按钮更新数据。但由于某种原因,它只响应第二个按钮而不响应第一个按钮。解决办法是什么?

if (interactive()) 
  ui <- fluidPage(
    sidebarLayout(
      sidebarPanel(
        actionButton("action_1", "Get 1"),
        actionButton("action_2", "Get 2"),
      ),
      mainPanel(
        textOutput("result")
      ),
    )
  )
  
  server <- function(input, output) 
    data <- eventReactive(input$action_1, 1)
    data <- eventReactive(input$action_2, 2)
    output$result <- renderText(data())
  
  
  shinyApp(ui, server)

【问题讨论】:

【参考方案1】:

这段代码的第二行覆盖了第一行:

data <- eventReactive(input$action_1, 1)
data <- eventReactive(input$action_2, 2)

你可以这样做:

  ui <- fluidPage(
    sidebarLayout(
      sidebarPanel(
        actionButton("action_1", "Get 1"),
        actionButton("action_2", "Get 2"),
      ),
      mainPanel(
        textOutput("result")
      ),
    )
  )
  
  server <- function(input, output) 
    result <- reactiveVal()
    observeEvent(input$action_1,  result(1) )
    observeEvent(input$action_2,  result(2) )
    output$result <- renderText(result())
  
  
  shinyApp(ui, server)

【讨论】:

【参考方案2】:

如果您有很多按钮,您可以简单地添加一个class 和一些简单的JS 来监控最后一次点击,如下所示:

library(shiny)

monitorJS <- "$(document).on('click', '.monitor', function () 
                                Shiny.onInputChange('last_click',this.id);
                               );"


ui <- fluidPage(
    tags$head(tags$script(monitorJS)),
    sidebarLayout(
        sidebarPanel(
         uiOutput("buttons")
        ),
        mainPanel(
            textOutput("result")
        ),
    )
)

server <- function(input, output, session) 
    
    output$buttons <- renderUI(
        a <- list()
        for(i in 1:200)
            id <- paste0("action_",i)
            name <- paste0("Get ",i)
            a[[i]] <- actionButton(id, name, class = "monitor")
        
        tagList(a)
    )
    
    data <- eventReactive(input$last_click,
        # Your click ligic here
        value <- gsub("action_","",input$last_click)
        value
    )
    
    output$result <- renderText(
        data()
    )



shinyApp(ui, server)

【讨论】:

以上是关于闪亮,两个动作按钮,它只响应第二个按钮而不响应第一个按钮的主要内容,如果未能解决你的问题,请参考以下文章

必须按两次才能进行 Swift 3 按钮操作

iphone:SDK 披露按钮没有从第一个 TableView 响应到第二个详细 TableView?

过滤器不响应我闪亮的应用程序中的应用和清除按钮

使用闪亮动作按钮在两个表之间循环

QT中父窗口响应子窗口动作

按钮没有响应 laravel