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 все панели должны быть несколько однородными.)
решение и образец кода можно найти в ответе здесь. Если потребуется, я также могу отправить код здесь.