【问题标题】:Need a way to reload the session immediately without finishing the code sequence in Shiny需要一种方法来立即重新加载会话,而无需完成 Shiny 中的代码序列
【发布时间】:2017-03-28 19:05:51
【问题描述】:

我正在使用闪亮的包来构建一个工具的网络版本。在提供输出之前,必须对用户输入进行验证。其中一项验证需要刷新工具。
为了完成这项工作,我尝试在名为“显示结果”的操作按钮中使用“session$reload”。
虽然 session$reload 在响应式按钮中运行良好,但我需要一种无需完成代码序列即可重置会话的方法。

工作会话重新加载

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

        { #Test Door Identification Server

          #Refresh button
          observeEvent(input$refresh, {
            session$reload()
          })

需要立即重置 session$code 的一段代码

    library(shiny)

ui <- fluidPage(

  actionButton('switchtab',"Click this"),
  textOutput('code_ran')

)

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

  observeEvent(input$switchtab,{
    aggg_result = -1
    if(aggg_result == -1)
    {
      session$reload()
      print("session reload not working")
    }

    print("Code running this line")

    output$code_ran <- renderText("code Ran this line without refreshing")

  })

}

  shinyApp(ui = ui, server = server)

这个函数的输出: 打印“重新加载不起作用”并继续执行其余语句。

我了解 session$reload 的工作原理,但是有没有办法在不打印“运行此行的代码”的情况下进行重置?

任何方向/建议都将受到欢迎。

问候, 韦维克S

【问题讨论】:

  • 我没有看到任何不一致的行为。例如,我从来没有看到output$code_ran 文本一直存在(但我确实看到它短暂闪烁)。如果我在服务器声明之后(observeEvent 之前)添加一个print("initiailizing") 语句,我总是在单击该按钮后最后得到它,这表明会话在observeEvent 运行后重新初始化。
  • 也许添加sessionInfo() 的输出也会对我们有所帮助。
  • 我使用“session$reload”的目的是重置应用程序并重新启动它。此外,如果满足条件“aggg_result”,我不希望代码继续进行。在我的原始代码中,下一行抛出错误,应用程序正在关闭而不刷新。
  • 好吧,无论如何,我看到的绝对不是“不一致”。你是什​​么意思?我认为它按设计工作。
  • 也许您需要将问题编辑为“需要立即重新加载会话的方法”并摆脱不一致的声明。

标签: r session shiny shiny-server


【解决方案1】:

好的,在session$reload() 这个之后简单地做一个return() 怎么样?

library(shiny)

ui <- fluidPage(

  actionButton('switchtab',"Click this"),
  textOutput('code_ran')

)

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

  print("Initializing")

  observeEvent(input$switchtab,{
    aggg_result = -1
    if(aggg_result == -1)
    {
      session$reload()
      return()
      print("session reload not working")
    }

    print("Code running this line")

    output$code_ran <- renderText("code Ran this line without refreshing")

  })

}
shinyApp(ui = ui, server = server)

它完成了你想要的,对吧?

【讨论】:

  • 谢谢迈克!它似乎有效,我为什么没有想到这个!
  • 好吧,你被困在那个模式中,对 Shiny 来说可能还很陌生。为什么我花了两个小时才想到它:)。实际上是在我要去散步的时候突然想到的。
猜你喜欢
  • 2017-04-09
  • 1970-01-01
  • 2016-05-05
  • 2018-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-25
  • 2015-02-07
相关资源
最近更新 更多