ShinyDasboard:重新加载会话后转到 MenuSubItem

ShinyDasboard : Go to a MenuSubItem after reload session

我用 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)
    }