[英]Ensure Shiny graphs only load once in shinyMobile f7Tab
我正在使用很棒的 shinyMobile package 創建一個移動應用程序。 它有 4 個選項卡 (f7Tab()),包括我加載所有圖表的儀表板選項卡。 這個想法是在用戶切換到選項卡時加載圖表,這樣他們就不會減慢初始應用程序的加載速度,而且除非觸發輸入,否則只加載一次圖表。
這是我的服務器代碼示例(有多個這樣的圖表):
# Reactively render timeseries graph
observe({
# Check which tab is opened (tab label should be 'Dashboard')
if (reactiveVal(input$mainTabs)() == 'Dashboard') {
output$tseriesGraph <- renderPlotly({
tseries_basic(input$tseriesVar)
})
}
})
以及對應的UI代碼:
# Timeseries plots
f7AccordionItem(
id='tseriesAccord',
title='Timeseries of individual variables',
# Choose var to plot
f7Select(
'tseriesVar',
'Choose variable to plot:',
selected=chosen_vars[1],
choices=chosen_vars
),
br(),
withSpinner(plotlyOutput("tseriesGraph",
height='350px')
)
)
就目前而言,每次用戶切換回儀表板選項卡時,服務器都會重新加載所有圖表,即使它們之前已加載。 如何防止 Shiny 不必要地重新加載這些圖表?
(另外,出於好奇,有沒有辦法在加載 id=tseriesAccord 的 f7AccordionItem 時加載圖表?這似乎不是這個 function 的 id 參數。)
非常感謝!
我最終找到了一種解決方法:使用 f7Accordion id 來確定是否應該加載圖表。 所以甚至不需要使用代碼來檢查我的儀表板是否打開。 我需要使用“狀態”object,根據 f7Accordion 下的 f7AccordionItem 是否打開,它顯示為 TRUE 或 FALSE。
例子:
# Server
observe(if (input$spagBasicAccord$state) {
output$spagBasicGraph <- renderPlotly({
spag_basic(input$spagBasicVar)
})
})
# UI
# Basic spaghetti graph
f7Accordion(
id='spagBasicAccord',
f7AccordionItem(
title='Basic spaghetti graph',
f7Select(
'spagBasicVar',
'Choose variable to plot:',
selected=chosen_vars[1],
choices=chosen_vars
),
br(),
withSpinner(plotlyOutput("spagBasicGraph",
height='350px')
)
)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.