通过导航到 navbarPage 中的特定 tabPanel 触发 R Shiny 响应式(Reactive)

标签 r shiny reactive

写一个 Shiny 的问题。我有一个 navbarPage,id = "navbar",并且在 navbarMenu 中,用户可以从几个 tabPanel 中选择一个。每个 tabPanel 都分配了一个值(值 = 1、值 = 2 等)。因此 input$navbar 是具有所选 tabPanel 值的 react 值。

我定义了一个响应式表达式,它对 tabPanel 的更改使用react(基于 input$navbar 使用react)。我真正想要的是对导航到特定的 tabPanel 使用react,而不是导航离开该 tabPanel。因此,当 input$navbar 从 1 更改为 2 时,我想要一个 react ,但是当从 2 更改为 1 时没有反应。我怎样才能做到这一点?

这是我的代码的相关片段,我认为我不需要一个完整的可重现示例,但如果我错了请告诉我。

#ui snippet
navbarPage(id = "navbar",
        navbarMenu(title = "Title",
                    tabPanel(title = "tp1", value = 1),
                    tabPanel(title = "tp2", value = 2),
                    #more tabPanels and ui stuff...

#server snippet
rctvfx <- reactive({
              #want this to react only when input$navbar changes from ==1 to ==2
              input$navbar 
              isolate({ 
                  #do stuff 
              })
          })

最佳答案

您可以使用 if陈述。这确保代码仅在用户导航到相应的 tab 时运行。 .

library(shiny)

shinyApp(
  ui = navbarPage(
    "App Title",
    id = "navbar",
    tabPanel("Plot"),
    navbarMenu(
      "More",
      tabPanel("Summary"),
      "----",
      "Section header",
      tabPanel("Table")
    )
  ),
  server = function(input, output){
    observe({
      if (req(input$navbar) == "Table")
        message("Table has been selected")
      if (req(input$navbar) == "Plot")
        message("Plot has been selected")
    })
  }
)

我建议使用 observe而不是 reactive即使所有响应式观察者都处于空闲状态,也要确保一切正常运行。

关于通过导航到 navbarPage 中的特定 tabPanel 触发 R Shiny 响应式(Reactive),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48955647/

相关文章:

rxjs - 在 Rx 中,我可以获取完整的序列,而不是仅获取最后一个去抖对象吗?

c# - 在特定时间后执行 Action ,但如果手动调用,则重置计时器

r - 带有 ggplot2 的箱线图 : Trying to lay geom_jitter over code for plot, 奇怪的离群点

r - visNetwork - highlightNearest - 仅显示选定 Node 的连接边

r - 调整 Shiny 仪表板中仪表板标题的高度

r - Shiny 的应用程序不更新隐藏的 slider

r - 在 Shiny 的两个 tabPanel 中绘制相同的输出

r - 如何反转单词?

r - 如果一行中的任何列满足条件而不是 mutate() 列

scope - 带有 onMount 变量的 Svelte 响应式(Reactive)语句