需要一种方法来立即重新加载会话,而无需完成 Shiny 中的代码序列

vev*_*man 4 session r shiny shiny-server

我正在使用闪亮的包来构建工具的网络版本。在提供输出之前,必须对用户输入执行验证。其中一项验证需要刷新工具。
为了完成此任务,我尝试在名为“显示结果”的操作按钮内使用“session$reload”。
虽然 session$reload 在反应式按钮中工作得很好,但我需要一种在不完成代码序列的情况下重置会话的方法。

工作会话重新加载

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

        { #Test Door Identification Server

          #Refresh button
          observeEvent(input$refresh, {
            session$reload()
          })
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

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

我知道这就是 session$reload 的工作原理,但是有没有一种方法可以在不打印“运行此行的代码”的情况下进行重置?

任何指示/建议都将受到欢迎。

问候, 维维克 S

Mik*_*ise 5

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

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)
Run Code Online (Sandbox Code Playgroud)

它实现了你想要的,对吗?

  • 好吧,您陷入了这种模式,并且可能对 Shiny 还很陌生。为什么我花了两个小时才想起来:)。当我实际上去散步时,我突然想到了这一点。 (2认同)