切换标签后刷新标签

时间:2019-05-08 11:26:37

标签: r shiny shiny-reactivity

我在服务器功能中

此函数使用从selectInput和dateInput控件获取的noc和endDate输入来计算SalesClientData数据帧

此功能的结果用于在选项卡1上绘制输出

    getPlotData <- reactive({

      req(input$noc, input$endDate)

      inpParam <<- input$noc 
      getSalesData(inpParam)
      End_date <<- input$endDate    

      SalesClientData <<- "a"

  })

我还有另一个函数,该函数不依赖于任何输入,但生成输出表,但是此函数将SalesClientData的值更改为b,当我再次移至选项卡1时,SalesClientData的值仍为b而不是a

此功能的结果用于在选项卡2上绘制输出

 getFinalReportData <- reactive({

    getInpChoice()
    SalesClientData <<- "b"

  })

我想做的是移回选项卡1后,该值应更改为SalesClientData的值

为简单起见,我使用了值a和b。

1 个答案:

答案 0 :(得分:2)

您可以使用input$tabsaccess the active tab name。为此,您可以使用:

observeEvent(input$tabs,{
  if(input$tabs == "tab1") {
    SalesClientData <<- "a"
  } else {
    SalesClientData <<- "b"
  }
})

我认为,与if语句相比,对于您的问题可能有更好的解决方案,但是对于您的示例信息,这是我能提供的最佳解决方案。您使用全局<<-运算符在reactive()函数内部分配值与应使用什么反应性函数相反,而<<-的使用通常具有undesirable effectsreactive()应该返回在应用程序中其他地方使用的值/对象。当您要修改对象而不返回任何内容时使用observe(),这就是为什么我在答案中使用observe()(您希望在环境中修改SalesClientData而不返回任何内容)的原因。 / p>

我将查看有关反应性的文档:
https://shiny.rstudio.com/articles/reactivity-overview.html https://shiny.rstudio.com/articles/understanding-reactivity.html https://shiny.rstudio.com/gallery/reactivity.html