R Shiny-динамически добавлять tabPanel в tabsetPanel (с использованием renderUI)

Я разрабатываю блестящее приложение, в котором я использую tabsetPanel, который генерируется, когда пользователь вводит определенный вклад. Таким образом, я хочу использовать

2 ответов


здесь вы идете. Код достаточно понятен.

library(shiny)
runApp(list(
  ui = pageWithSidebar(
    headerPanel('Dynamic Tabs'),
    sidebarPanel(
      numericInput("nTabs", 'No. of Tabs', 5)
    ),
    mainPanel(
      uiOutput('mytabs')  
    )
  ),
  server = function(input, output, session){
    output$mytabs = renderUI({
      nTabs = input$nTabs
      myTabs = lapply(paste('Tab', 1: nTabs), tabPanel)
      do.call(tabsetPanel, myTabs)
    })
  }
))

есть способ динамически добавлять tabPanels без renderUI, что может быть не так очевидно, как версия с renderUI. Я написал функцию addTabToTabset который добавит любую(список) tabPanel (s) к tabset/navbar.

этот подход имеет ряд преимущества над использованием renderUI:

  • существующие tabPanels не перерисовываются каждый раз при добавлении новой панели. (быстрее)
  • , не сброс всех входных переменных внутри существующих панелей. (нет переменной, хранящей обходные пути)
  • структуру содержания панели можно выбрать индивидуально. (В версии lapply - renderUI все панели должны быть несколько однородными.)

решение и образец кода можно найти в ответе здесь. Если потребуется, я также могу отправить код здесь.