R Shiny中点击按钮跳转至嵌套导航栏子标签页的实现
Shiny嵌套导航栏跳转解决方案
要实现从Tab1的按钮直接跳转到Tab3下的第二个子标签页,核心是依次更新父级和子级导航栏,具体实现如下:
修正Server逻辑
在按钮的observeEvent中,先切换父导航栏到Tab3,再切换子导航栏到目标子标签:
server <- shinyServer(function(input, output, session) { observeEvent(input$btn_tab3, { # 切换父导航到Tab3 updateNavbarPage(session, inputId = "first_nav", selected = "tab_3") # 切换子导航到tab_3_2 updateNavbarPage(session, inputId = "second_nav", selected = "tab_3_2") }) })
常见失败原因
- 只更新子导航栏:此时父Tab3未激活,子导航处于隐藏状态,更新操作无法生效
- 渲染延迟问题:极少数情况下,两步操作间隔过短可能导致子导航更新不触发,可通过
shiny::delay(100, { ... })包裹子导航更新代码解决:observeEvent(input$btn_tab3, { updateNavbarPage(session, inputId = "first_nav", selected = "tab_3") shiny::delay(100, { updateNavbarPage(session, inputId = "second_nav", selected = "tab_3_2") }) })
完整可运行代码
library(shiny) ui <- shinyUI(fluidPage( titlePanel("My Web App"), navbarPage( "My App", id = "first_nav", tabPanel(title = "Tab 1", value = "tab_1", actionButton("btn_tab3", "Go to tab 3.2") ), tabPanel(title = "Tab 2", value = "tab_2", h2("This is Tab 2") ), tabPanel(title = "Tab 3", value = "tab_3", h2("This is Tab 3"), fluidRow(), navbarPage( title = "third tab navbar", id = "second_nav", tabPanel(title = "tab 3.1",value = "tab_3_1",h2("This is 3.1")), tabPanel(title = "tab 3.2",value = "tab_3_2",h2("This is 3.2")), tabPanel(title = "tab 3.3",value = "tab_3_3",h2("This is 3.3")), tabPanel(title = "tab 3.4",value = "tab_3_4",h2("This is 3.4")), ), ) ) )) server <- shinyServer(function(input, output, session) { observeEvent(input$btn_tab3, { updateNavbarPage(session, inputId = "first_nav", selected = "tab_3") updateNavbarPage(session, inputId = "second_nav", selected = "tab_3_2") }) }) shinyApp(ui = ui, server = server)
内容的提问来源于stack exchange,提问作者MonkeyDLuffy
相关产品推荐
相关产品推荐

