隐藏闪亮的选项卡面板时如何去除残留物

How to remove residual when hiding a tabpanel in shiny

我想 hide/show 给定特定条件的选项卡面板。选择"source 2"时,我想隐藏TAB2,但是我使用的代码有一个错误。 如果我先选择"source 1",然后点击"tab2",并将数据源更改为"source 2","tab2" tabpanel确实隐藏了,但是"tab2"的内容涵盖了"tab1"的内容。如何删除隐藏选项卡的剩余部分?任何想法将不胜感激。

library(shiny)
library(shinyjs)

runApp(list(
  ui = fluidPage(
    useShinyjs(),
    selectInput('dataSource',h5("Please choose the data source:"), c("source 1", "source 2"), "source 1"),
    tabsetPanel(
      id = "navbar",
      tabPanel(title = "tab1",
               value = "tab1",
               h1("Tab 1")
      ),
      tabPanel(id="id2", title = "tab2",
               value = "tab2",
               h1("Tab 2")
      )
    )
  ),
  server = function(input, output) {
    observeEvent(input$dataSource,{
      toggle(condition = (input$dataSource !='source 2'), selector = "#navbar li a[data-value=tab2]")
    })
  }
))

[错误看起来像这样][1] [1]: http://i.stack.imgur.com/eOHLS.png

我可以在笔记本电脑上重现错误。

我的建议是使用 renderUI 函数动态创建 tabsetPanel

library(shiny)
# library(shinyjs)

runApp(list(
  ui = fluidPage(
    #useShinyjs(),
    selectInput('dataSource',h5("Please choose the data source:"), c("source 1", "source 2"), "source 1"),
    uiOutput("dynamic")

  ),
  server = function(input, output) {

    output$dynamic <- renderUI({

      if (input$dataSource == "source 1") { 

        tabsetPanel(
          id = "navbar",
          tabPanel(title = "tab1",
                   value = "tab1",
                   h1("Tab 1")
          ),
          tabPanel(id="id2", title = "tab2",
                   value = "tab2",
                   h1("Tab 2")
          )
        )
      } else {
        tabsetPanel(
          id = "navbar",
          tabPanel(title = "tab1",
                   value = "tab1",
                   h1("Tab 1")
          )
        )
      }
    })
  }
))