【发布时间】:2021-09-04 11:25:47
【问题描述】:
这就是问题所在:我有一个响应式输入返回一个字符串。字符串的一部分描述类别,一部分描述项目。有些事件我希望仅在类别更改时触发,而不是在项目更改时触发。换句话说,我希望有条件地隔离一个事件,以便根据该事件的实际值调用反应函数。
这是一个演示:
library(shiny)
ui <- fluidPage(
fluidRow(
selectInput("selection", "Select:",
choices=c("catA:itemA", "catA:itemB", "catB:itemC"))),
fluidRow("Category:", textOutput("category")),
fluidRow("Item:", textOutput("item"))
)
server <- function(input, output) {
.cat <- reactive({ gsub(":.*", "", input$selection) })
.item <- reactive({ gsub(".*:", "", input$selection) })
output$category <- renderText({
## this should not be triggered when category does not change!
message("Triggered category change")
.cat()
})
output$item <- renderText({
message("Triggered item change")
.item()
})
}
shinyApp(ui, server)
上面的代码没有做我想做的事。我想要的是output$category <- renderText({...}) 被触发当且仅当.cat() 的值发生变化。我怎样才能实现这个适度的目标?
【问题讨论】: