【问题标题】:Restart Shiny Session重新启动闪亮会话
【发布时间】:2014-09-23 14:32:40
【问题描述】:

这似乎是一个非常明显的问题,但我没有找到任何关于该主题的内容。

如何刷新闪亮的应用程序(相当于按 F5,或单击 RStudio 中的“重新加载应用程序”按钮)?

ui.R

 shinyUI(pageWithSidebar(
  headerPanel("Example"),
  sidebarPanel(
    actionButton("goButton", "Refresh")
  ),  
  mainPanel(
        h4("I would really like to refresh this please.")
    )   
))

服务器.R

shinyServer(function(input, output,session) { 
  observe({
    if(input$goButton==0) return(NULL)
    isolate({
      #
      #  I would like to refresh my session here with some sort of 
      #  function like session(refresh)...
    })
    })
})

我不认为我想使用 stopApp() - 我只想刷新它,使其处于与加载时相同的状态。

更新

在 RStudio 网站上,它显示了here 如何从服务器管理用户会话。具体来说,

$ sudo rstudio-server suspend-session <pid>

在应用程序中是否有与用户等效的功能?在会话信息 (here) 的文档中,它说有一个 onSessionEnded(callback) 函数。如果有一个执行上述挂起会话功能的 session.End() 函数会很好!

【问题讨论】:

    标签: r shiny shinyjs


    【解决方案1】:

    您可以使用history.go(0) js 方法重新加载页面,从而重置会话,例如来自链接:

    p(HTML("<A HREF=\"javascript:history.go(0)\">Reset this page</A>"))
    

    此外,您可以使用shinyjs package 从服务器内执行 javascript:

    library(shiny)
    library(shinyjs)
    
    jsResetCode <- "shinyjs.reset = function() {history.go(0)}" # Define the js method that resets the page
    
    shinyApp(
      ui = fluidPage(
        useShinyjs(),                                           # Include shinyjs in the UI
        extendShinyjs(text = jsResetCode, functions = "reset"), # Add the js code to the page
        actionButton("reset_button", "Reset Page")
      ),
    
      server = function(input, output) {
        observeEvent(input$reset_button, {js$reset()})          # Call the method from
                                                                # somewhere within the server
      })
    

    【讨论】:

    • 不错的答案@bubble。作为shinyjs 的作者,我还想补充一点,如果重置所有输入就足够了(即,将所有输入值恢复到初始状态,而不是从字面上刷新页面),那么您可以使用内置的-在shinyjs 重置功能中
    • 感谢您的反馈@daattali :) 这是我的第一个答案。
    • 很好的答案,抱歉耽搁了。
    【解决方案2】:

    您可以通过在您的 ui 代码中包含以下内容来为您的应用添加刷新图标和弹出框:

    library(shinyBS)
    
    tags$a(href="javascript:history.go(0)", 
               popify(tags$i(class="fa fa-refresh fa-5x"),
                      title = "Reload", 
                      content = "Click here to restart the Shiny session",
                      placement = "right"))
    

    它应该给你这个:

    【讨论】:

      【解决方案3】:

      会话现在有一个方法来解决这个问题。不再需要 Shinyjs:

      session$reload()
      

      【讨论】:

      • 这需要将session 添加到服务器的function() 参数中。
      猜你喜欢
      • 1970-01-01
      • 2018-04-13
      • 1970-01-01
      • 2015-05-14
      • 2017-03-29
      • 1970-01-01
      • 2012-02-19
      • 2017-05-24
      • 2021-09-23
      相关资源
      最近更新 更多