【问题标题】:Conditional isolate in shiny / check whether value changed闪亮的条件隔离/检查值是否改变
【发布时间】: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 &lt;- renderText({...}) 被触发当且仅当.cat() 的值发生变化。我怎样才能实现这个适度的目标?

【问题讨论】:

    标签: r shiny reactive


    【解决方案1】:

    使用反应值而不是反应导体:

      .cat <- reactiveVal()
      .item <- reactiveVal()
      
      observeEvent(input[["selection"]], { 
        .cat(gsub(":.*", "", input$selection))
        .item(gsub(".*:", "", input$selection))
      })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-22
      • 2014-06-15
      相关资源
      最近更新 更多