Shiny выполняет функции, используемые в других вкладках при первой загрузке. В качестве минимального примера посмотрите на следующее приложение, которое взято из здесь а>. В этом приложении есть два пункта меню. Если вы нажмете на элемент меню боковой панели A, он должен выполнить функцию renderUI
, которая создаст пункт меню через output$A_panel
. Это приложение делает это отлично. Однако, если вы посмотрите на свою консоль R, вы увидите, что печатаются как Inside A Panel
, так и Inside B Panel
. Это означает, что обе функции renderUI
были выполнены при первой загрузке приложения, и блестящие просто скрыли их, если пользователь не щелкнет пункт меню B.
У меня есть приложение, использующее аналогичную технику, но выполняемые функции используют SQL-запросы и некоторые вычисления, которые я не хочу выполнять при первой загрузке. Это критически замедляет работу моего приложения. Есть ли способ предотвратить это автоматическое выполнение?
library(shiny)
library(shinydashboard)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(
sidebarMenu(id = "sidebarmenu",
menuItem("A", tabName = "a", icon = icon("group", lib="font-awesome")),
menuItem("B", tabName = "b", icon = icon("check-circle", lib = "font-awesome")),
conditionalPanel("input.sidebarmenu === 'a'",
uiOutput('A_panel')
),
conditionalPanel("input.sidebarmenu === 'b'",
uiOutput('B_panel')
)
),
sliderInput("x", "Outside of menu", 1, 100, 50)
),
dashboardBody()
)
server <- function(input, output) {
output$A_panel <- renderUI({
cat('Inside A Panel \n')
sliderInput("b", "Under A", 1, 100, 50)
})
output$B_panel <- renderUI({
cat('Inside B Panel \n')
sliderInput("b", "Under B", 1, 100, 50)
})
}
shinyApp(ui, server)