写一个 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/