闪亮,两个动作按钮,它只响应第二个按钮而不响应第一个按钮
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)
【讨论】:
以上是关于闪亮,两个动作按钮,它只响应第二个按钮而不响应第一个按钮的主要内容,如果未能解决你的问题,请参考以下文章