写一个闪亮的问题。我有一个 navbarPage,id = "navbar",并且在 navbarMenu 中用户可以从几个 tabPanels 中选择一个。每个 tabPanel 都分配了一个值(值 = 1、值 = 2 等)。因此 input$navbar 是与所选 tabPanel 值的反应值。
我定义了一个响应式表达式,它对 tabPanel 的变化做出反应(基于 input$navbar 做出反应)。我真正想要的是让它对导航到特定的 tabPanel 做出反应,而不是导航离开那个 tabPanel。所以,当 input$navbar 从 1 变为 2 时,我想要一个反应,但是当从 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
})
})
Run Code Online (Sandbox Code Playgroud)
您可以使用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")
})
}
)
Run Code Online (Sandbox Code Playgroud)
我会建议使用observe
而不是reactive
确保一切运行,即使所有反应器的观察者都空闲。