切换标签后刷新标签

Refresh tab after switching tabs

我有服务器功能

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

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

    getPlotData <- reactive({

      req(input$noc, input$endDate)

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

      SalesClientData <<- "a"

  })

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

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

 getFinalReportData <- reactive({

    getInpChoice()
    SalesClientData <<- "b"

  })

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

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

您可以使用input$tabsaccess the active tab name。要实现这一点,您可以使用:

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

我觉得对于您的问题可能有比 if 语句更优化的解决方案,但是根据您的示例信息,这是我能想到的最好的解决方案。您使用全局 <<- 运算符在 reactive() 函数内部赋值与应该使用反应函数的用途相反,并且 <<- 的使用通常有 undesirable effectsreactive() 应该 return 一个 value/object 在您的应用程序的其他地方使用。 observe() 用于在不使用 return 修改对象时使用,这就是我在回答中使用 observe() 的原因(您希望在不使用 SalesClientData 的环境中修改 SalesClientData return任何东西)。

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