shinydashboard :使用 uiOutput 时获取特定的默认页面

shinydashboard : getting specific default page while using uiOutput

我正在制作响应式闪亮网页并卡在下面的代码处。

library(shiny)
library(shinydashboard)

ui = dashboardPage(
  dashboardHeader(title = "header"),
  dashboardSidebar(
    sidebarMenuOutput("sideBar")),
  dashboardBody(
    uiOutput("test")
  )
)

server = shinyServer(function(input, output, session) { 
  output$sideBar <- renderMenu({
    sidebarMenu(id = "menu",
                menuItem("Dashboard", tabName ="dashboard", icon = icon('dashboard')),
                menuItem("DBcentor", tabName ="dbcenter", icon = icon('database'))
    )
  }) 
  output$test <- renderUI ({
    tabItems(
      tabItem(tabName = "dashboard", uiOutput("dashboardbody")),
      tabItem(tabName = "dbcenter", uiOutput("dbcenterbody"))
    )
  })
  output$dashboardbody <- renderUI ({
    box("Dashboard Body")
  })
  output$dbcenterbody <- renderUI ({
    box("Dbcenter Body")
  })
  
})

shinyApp(ui, server)

我使用 uiOutput 构建主体,但在加载闪亮的应用程序后,仪表板页面上没有任何内容。

我这样修改了我的代码,

library(shiny)
library(shinydashboard)

ui = dashboardPage(
  dashboardHeader(title = "header"),
  dashboardSidebar(
    sidebarMenuOutput("sideBar")),
  dashboardBody(
    tabItems(
      tabItem(tabName = "dashboard", uiOutput("dashboardbody")),
      tabItem(tabName = "dbcenter", uiOutput("dbcenterbody"))
    )
  )
)

server = shinyServer(function(input, output, session) { 
  output$sideBar <- renderMenu({
    sidebarMenu(id = "menu",
                menuItem("Dashboard", tabName ="dashboard", icon = icon('dashboard')),
                menuItem("DBcentor", tabName ="dbcenter", icon = icon('database'))
    )
  }) 
  output$dashboardbody <- renderUI ({
    box("Dashboard Body")
  })
  output$dbcenterbody <- renderUI ({
    box("Dbcenter Body")
  })
  
})

shinyApp(ui, server)

当然可以,box("dashboadbody") 出现在第一页。

我想使用 uiOutput 因为我应该使用 input data 来构建菜单和项目。 有什么方法可以在默认页面上同时使用uiOutput和获取box("dashboard")

试试这个

ui = dashboardPage(
  dashboardHeader(title = "header"),
  dashboardSidebar(
    sidebarMenuOutput("sideBar")),
  dashboardBody(
    uiOutput("test")
  )
)

server = shinyServer(function(input, output, session) { 
  output$sideBar <- renderMenu({
    sidebarMenu(id = "menu",
                menuItem("Dashboard", tabName ="dashboard", icon = icon('dashboard')),
                menuItem("DBcentor", tabName ="dbcenter", icon = icon('database'))
    )
  }) 
  
  output$dashboardbody <- renderUI ({
    box("Dashboard Body")
  })
  output$dbcenterbody <- renderUI ({
    box("Dbcenter Body")
  })
  updateTabItems(session,"menu","dbcenter")
  updateTabItems(session,"menu","dashboard")
  
  output$test <- renderUI ({
    tagList(
      tabItems(
        tabItem(tabName = "dashboard", uiOutput("dashboardbody")),
        tabItem(tabName = "dbcenter", uiOutput("dbcenterbody"))
      ))
  })
})

shinyApp(ui, server)