【问题标题】:Ensure Shiny graphs only load once in shinyMobile f7Tab确保 Shiny 图表仅在 shinyMobile f7Tab 中加载一次
【发布时间】:2021-06-27 07:11:43
【问题描述】:

我正在使用很棒的 shinyMobile 包来创建一个移动应用程序。它有 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 时加载图表?这似乎不是这个函数的 id 参数。)

非常感谢!

【问题讨论】:

    标签: r shiny reactive shiny-reactivity


    【解决方案1】:

    我最终找到了一种解决方法:使用 f7Accordion id 来确定是否应该加载图表。所以甚至不需要使用代码来检查我的仪表板是否打开。我需要使用“状态”对象,根据 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')
          )
        )
      )
    

    【讨论】:

      猜你喜欢
      • 2017-10-13
      • 2020-07-09
      • 1970-01-01
      • 1970-01-01
      • 2011-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      相关资源
      最近更新 更多