Shiny正在執行第一次加載時在其他標籤中使用的函數。舉一個最簡單的例子,看看從wch here採用的以下應用程序。這個應用程序有兩個菜單項。如果您單擊邊欄菜單項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)
優秀的答案。我確實嘗試了一個變種if(input $ sidebarmenu!=「a」)return()'。這對我沒有用。但我在一個非常老的閃亮版本。我現在會責怪那個。 +1爲第二種方法。 – Sal