19 Stimmen

Sitzung von Shiny neu starten

Dies scheint eine sehr offensichtliche Frage zu sein, aber ich habe nichts zu dem Thema gefunden.

Wie kann ich eine glänzende Anwendung aktualisieren (entsprechend dem Drücken von F5 oder dem Klicken auf die Schaltfläche "App neu laden" in RStudio)?

ui.R

 shinyUI(pageWithSidebar(
  headerPanel("Beispiel"),
  sidebarPanel(
    actionButton("goButton", "Aktualisieren")
  ),  
  mainPanel(
        h4("Ich möchte das wirklich aktualisieren, bitte.")
    )   
))

server.R

shinyServer(function(input, output, session) { 
  observe({
    if(input$goButton==0) return(NULL)
    isolate({
      #
      # Ich möchte meine Sitzung hier gerne aktualisieren mit einer Art Funktion wie session(refresh)...
    })
    })
})

Ich denke, ich möchte keine stopApp() verwenden - ich möchte es einfach aktualisieren, sodass es im gleichen Zustand ist wie beim Laden.

UPDATE

Auf der RStudio-Website zeigt es hier, wie man eine Benutzersitzung vom Server aus verwalten kann. Speziell,

$ sudo rstudio-server suspend-session 

Gibt es die äquivalente Funktion als Benutzer innerhalb der App? In der Dokumentation für Sitzungsinformationen (hier) steht, dass es eine onSessionEnded(callback) Funktion gibt. Es wäre gut, wenn es eine session.End() Funktion geben würde, die die oben genannte suspend-session Funktion ausführt!

23voto

Jan Punkte 3750

Die Sitzung hat jetzt eine Methode, um den Trick zu vollbringen. Shinyjs ist nicht mehr erforderlich:

session$reload()

20voto

bubble Punkte 412

Sie können die history.go(0) js-Methode verwenden, um die Seite neu zu laden und somit die Sitzung zurückzusetzen, z.B. von einem Link aus:

p(HTML("Diese Seite zurücksetzen"))

Zusätzlich können Sie das shinyjs Paket verwenden, um JavaScript innerhalb des Servers auszuführen:

library(shiny)
library(shinyjs)

jsResetCode <- "shinyjs.reset = function() {history.go(0)}" # Definieren Sie die JavaScript-Methode, die die Seite zurücksetzt

shinyApp(
  ui = fluidPage(
    useShinyjs(),                                           # Fügen Sie shinyjs der UI hinzu
    extendShinyjs(text = jsResetCode, functions = "reset"), # Fügen Sie den JavaScript-Code der Seite hinzu
    actionButton("reset_button", "Seite zurücksetzen")
  ),

  server = function(input, output) {
    observeEvent(input$reset_button, {js$reset()})          # Rufen Sie die Methode von irgendwo im Server aus
  })

9voto

SANBI samples Punkte 2118

Sie können Ihrem App ein Refresh-Symbol und Popover hinzufügen, indem Sie den folgenden Code in Ihrem UI-Code einschließen:

library(shinyBS)

tags$a(href="javascript:history.go(0)", 
           popify(tags$i(class="fa fa-refresh fa-5x"),
                  title = "Neu laden", 
                  content = "Klicken Sie hier, um die Shiny-Sitzung neu zu starten",
                  placement = "right"))

Es sollte Ihnen dies geben:

Bildbeschreibung hier eingeben

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X