从服务器部分刷新一个R会话

Refreshing a R shiny session from within the server part

本文关键字:一个 会话 服务器部 刷新      更新时间:2023-09-26

我的R闪亮的应用程序加载信息,我希望在这些信息被加载之前,会话自动刷新。

类似的问题已经问过好几次了,但答案总是有一个按钮。例如:页面刷新按钮

我试图在服务器部分的观察函数中包含重置代码,但没有成功:

observe({
jsResetCode <- "shinyjs.reset = function() {history.go(0)}" # Define the js     method that resets the page
useShinyjs()                                      
extendShinyjs(text = jsResetCode)       
})

如何从函数内自动刷新R shiny会话?

我将不得不看到一个完整的代码,能够帮助你。看看这些能不能帮到你。玩得开心

library(shiny)
library(shinydashboard)

dat = data.frame(id = c("d","a","c","b"), a = c(1,2,3,4), b = c(6,7,8,9))
header <- dashboardHeader(
)
sidebar <- dashboardSidebar(
  tags$head(tags$style(HTML('.content-wrapper { height: 1500px !important;}'))),
  sidebarMenu (
    menuItem("A", tabName = "d1"),
    menuItem("B", tabName = "d2"),
    menuItem("C", tabName = "d3")
  )
)
body <- dashboardBody(
  tabItems(
    tabItem(tabName = "d1",
            box(title = "AAA",
                actionButton("refreshTab1_id", "Refresh Tab 1"),
                actionButton("sortTable1_id", "Sort Table 1"),
                DT::dataTableOutput("table_for_tab_1", width = "100%"))
    ),
    tabItem(tabName = "d2",
             box(title = "BBB",
                actionButton("refreshTab2_id", "Refresh Tab 2"),
                actionButton("sortTable2_id", "Sort Table 2"),
                DT::dataTableOutput("table_for_tab_2", width = "100%"))
    ),
    tabItem(tabName = "d3",
            box(title = "CCC",
                actionButton("refreshTab3_id", "Refresh Tab 3"),
                actionButton("sortTable3_id", "Sort Table 3"),
                DT::dataTableOutput("table_for_tab_3", width = "100%"))
    )
  )
)
# UI
ui <- dashboardPage(header, sidebar, body)
# Server
server <- function(input, output, session) {

    observe({
        if (input$sortTable1_id || input$sortTable2_id || input$sortTable3_id) {
            dat_1 = dat %>% dplyr::arrange(id)
        } else {
            dat_1 = dat
        }
        output$table_for_tab_1 <- output$table_for_tab_2 <- output$table_for_tab_3 <- DT::renderDataTable({ 
            DT::datatable(dat_1, 
                    filter = 'bottom', 
                    selection = "single",
                    colnames = c("Id", "A", "B"),
                    options = list(pageLength = 10,
                                    autoWidth = TRUE#,
                                    # columnDefs = list(list(targets = 9, 
                                    #                        visible = FALSE))
                    )
            )
        })
    })
    observe({
        if (input$refreshTab1_id || input$refreshTab2_id || input$refreshTab3_id) {
            session$reload()
        }
    })
}
# Shiny dashboard
shiny::shinyApp(ui, server)