我用ShinyDashboard开发了一个应用程序。在用户输入数据的最后,我用session$reload()
更新页面,因为我在同一页面上有几个表和图需要更新。但是,刷新会使我返回到应用程序的第一页,并且我希望停留在当前页面上。
我使用menuSubItem
,如果我尽可能简化我的案例,这里有一个例子:
if (interactive()) {
ui <- dashboardPage(
dashboardHeader(title = "Go to sub 2 after reload"),
dashboardSidebar(
sidebarMenu(
id = "tabs",
menuItem("My menu", tabName = "idMenu",
menuSubItem("Menu sub 1", tabName = 'idMenu_sub1'),
menuSubItem("Menu sub 2", tabName = 'idMenu_sub2')
)
)
),
dashboardBody(
tabItems(
tabItem(tabName = "idMenu_sub1",
"I'm here after a reload"
),
tabItem(tabName = "idMenu_sub2",
actionButton(inputId = "reset", label = "Reset"),
"But I want to stay HERE")
)
)
)
server <- function(input, output, session) {
observeEvent(input$reset, {
session$reload()
})
}
shinyApp(ui, server)
}
我最终选择了一个在执行重新加载操作时更改的参数。
if (interactive()) {
# Parameter (in global for me)
param_stay_page <- FALSE
ui <- dashboardPage(
dashboardHeader(title = "Go to sub 2 after reload"),
dashboardSidebar(
sidebarMenu(
id = "tabs",
menuItem("My menu", tabName = "idMenu",
menuSubItem("Menu sub 1", tabName = 'idMenu_sub1'),
menuSubItem("Menu sub 2", tabName = 'idMenu_sub2')
)
)
),
dashboardBody(
tabItems(
tabItem(tabName = "idMenu_sub1",
"I'm here after a reload"
),
tabItem(tabName = "idMenu_sub2",
actionButton(inputId = "reset", label = "Reset"),
"But I want to stay HERE")
)
)
)
server <- function(input, output, session) {
observeEvent(input$reset, {
session$reload()
param_stay_page <<- TRUE
})
if(param_stay_page){
updateTabItems(session, "tabs","idMenu_sub2")
param_stay_page_newPT <<- FALSE
}
shinyApp(ui, server)
}