簡體   English   中英

確保 Shiny 圖形僅在 shinyMobile f7Tab 中加載一次

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM