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

如何在Shiny Dashboard特定TabPanel中仅显示指定Widget

问题原因

你代码里的tabPanel标题用strong()包裹,但未指定name参数,导致input$tabs的实际取值不是预期的纯文本"PLAGIOCLASE SATURATION CHECK",而是被转义后的HTML内容,条件判断无法匹配,组件因此无法显示。

解决方法

给每个tabPanel添加name参数,让input$tabs对应明确的字符串标识,确保条件判断能准确触发。

修改后的完整代码
## app.R ##
library(shiny)
library(shinydashboard)
library(shinyWidgets)
ui <- dashboardPage(
  dashboardHeader(title = "P-T-H2O-An"),
  dashboardSidebar(
    uiOutput("filter1")
  ),
  dashboardBody(
    tabsetPanel(
      id="tabs",
      tabPanel(
        name = "plag_sat",
        strong("PLAGIOCLASE SATURATION CHECK")
      ),
      tabPanel(
        name = "an_content",
        strong("AN CONTENT")
      ),
      tabPanel(
        name = "thermometry",
        strong("THERMOMETRY")
      ),
      tabPanel(
        name = "hygrometry",
        strong("HYGROMETRY")
      ),
      tabPanel(
        name = "barometry",
        strong("BAROMETRY")
      ),
      tabPanel(
        name = "filter_save",
        strong("Filtering & Saving Estimates")
      )
    )
  )
)

server <- function(input, output) {
  output$filter1<-renderUI({
    if(input$tabs == "plag_sat"){
      pickerInput(
        inputId = "x1",
        label = "Select all option",
        choices = rownames(mtcars),
        multiple = F,
        options = list(`actions-box` = TRUE)
      )
    } else {
      return(NULL)
    }
  })
}

shinyApp(ui, server)
补充说明
  • 设置name参数后,input$tabs直接返回该参数的值,不受标题HTML样式影响,判断逻辑更稳定。
  • 若不想额外设置name,也可以用tags$strong包裹标题并声明html=TRUE,此时input$tabs会返回纯文本标题:
    tabPanel(
      title = tags$strong("PLAGIOCLASE SATURATION CHECK"),
      html = TRUE
    )
    
    这种情况下server里的判断可保留input$tabs == "PLAGIOCLASE SATURATION CHECK",但设置name的方式更推荐,尤其适合标题文本较长或需频繁修改样式的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 15:43:29