session $ onFlushed搞砸了invalidateLater

时间:2018-10-10 17:18:07

标签: r shiny

我有一个带有一些textOutput的闪亮应用程序,该文本输出始终从值0开始,然后在单击某些按钮后随时间增加。由于我必须在应用程序启动时将其设置为0,因此我使用session $ onFlushed进行设置。然后,为了使值随着时间增加,我使用invalidateLater()。好吧,问题是在我设置session $ onFlushed之前,计时器工作正常。但是,这样做之后,它停止了工作。这是一些生殖代码:

library(shiny)
vars=reactiveValues(start=F,stTime=0)
ui <- fluidPage(
  fluidRow(
    column(12,textOutput("cronometro")),
    column(12,actionButton("start","Iniciar")
)
))

server <- function(input, output, session) {
  session$onFlushed(function() {
    output$cronometro=renderText({paste("00:00")})
  })

  observeEvent(input$start,{
    vars$stTime=Sys.time()
    vars$start=T
  })

  output$cronometro=renderText({
    invalidateLater(1000,session)
    if(vars$start){
      paste(Sys.time()-vars$stTime)
    }
  })
}

shinyApp(ui, server)

如果我将session $ onFlushed注释掉,一切都会很好。

1 个答案:

答案 0 :(得分:0)

我认为您的问题是您不应该在onFlushed事件中更新输出。是否有参考资料,您看到什至刷新了刷新中的输出?看起来您仅应(可能)在该步骤中更新无功值。我不明白即使是执行此类任务,您也是如何偶然发现同花顺的。

但是您似乎只想更改文本输出的默认值。你为什么不只用

output$cronometro=renderText({
  invalidateLater(1000,session)
  if(vars$start){
    Sys.time()-vars$stTime
  } else {
    "00:00"
  }
})