You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Shiny应用中获取bslib::nav_insert生成的动态激活标签页名称

解决bslib动态标签页激活状态无法捕获的问题

问题根源

用bslib::nav_insert动态添加标签页时,如果不给nav_panel显式指定id参数,bslib会自动生成随机内部ID,而非使用标签标题作为ID。这就导致page_navbar的id对应的input$all_tabs无法捕获动态标签页的激活状态,只会返回NULL。而静态标签页默认以标题作为ID,因此能正常被识别。

修复方法

动态创建nav_panel时,手动设置id参数,让ID与标签标题保持一致(或使用你需要的唯一标识),这样page_navbar就能正确跟踪所有标签页的激活状态。

修改后的完整代码

library(shiny)
library(bslib)

all_forms <- c("Dynamic Tab1", "Dynamic Tab2")

ui <- fluidPage(
  bslib::page_navbar(
    id = "all_tabs",
    sidebar = bslib::sidebar(textOutput("active_tab")), 
    bslib::nav_panel("static tab")
  ) 
)

server <- function(input, output, session) {
  lapply(all_forms, \(i){
    bslib::nav_insert(
      id = "all_tabs",
      # 显式指定nav_panel的id与标题一致
      bslib::nav_panel(title = i, id = i)
    )
  })
  
  output[["active_tab"]] <- renderText({
    input$all_tabs
  })
  
}

shinyApp(ui, server)

效果验证

修改完成后,无论是切换到静态标签页还是动态添加的标签页,侧边栏都会正确显示当前激活的标签名称,input$all_tabs也能正常获取到对应的标签ID(此处即标题文本)。

内容的提问来源于stack exchange,提问作者Leon Samson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 12:52:42