首页 > 解决方案 > 没有新渲染的闪亮更新信息框

问题描述

我需要定期刷新信息框中显示的数据,但每次更新时都会呈现一个新的信息框,从而导致不良的用户体验。

我尝试使用 futures/promises 进行异步处理,但 renderinfobox 仍然会在数据更新时呈现一个新框。这是我的代码:

invalidateLater(30000)
results <-future({testFuture()})
return(value(results))

我希望能够更新信息框的基础数据,而无需在整个查询期间使 ui 元素变暗。

标签: rshinyinfobox

解决方案


无需在每次值更改时重新渲染信息框,您可以只重新渲染信息框的标题,正如我通过创建输出元素所展示的那样。我创建了一个工作示例,它刷新信息框以秒级显示当前时间。

library(shiny)
library(shinydashboard)

ui <- dashboardPage(
  dashboardHeader(title = "Test App"),
  dashboardSidebar(),
  dashboardBody(
    infoBox("TestBox", value = textOutput("currentTime"), subtitle = NULL,
            icon = shiny::icon("bar-chart"), color = "aqua", width = 4,
            href = NULL, fill = FALSE)
  )
)

server <- function(input, output, session) {

  output$currentTime <- renderText({
    invalidateLater(1000, session)
    paste(Sys.time())
  })

}

shinyApp(ui = ui, server = server)

一定要试试你的代码,如果这有帮助,请告诉我!


推荐阅读