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)