简体   繁体   中英

R Shiny navbarPage; values not loading from server

Help, For the life of me. I can't get values to populate from the server to the infoBox in the UI, I've tried to define the infoboxes from the server section. but the infoboxes will only appear if I construct them in the UI (as shown below).

The goal is to populate the boxes with filtered data based on user inputs, but I've abandoned this at this stage because I can't even pass a value from the server to the UI infobox here:

infoBox("Participants Trained", 
       value = renderText("AYval"), # tried every combo here
       width = 12,color = "blue",  # tried width = NULL
       icon = icon("fa-solid fa-people-group"), fill = F)

A value shows when I hardcode a value in "value = ", but none of the render options, renderText, verbatimText, output$AYval, valueTextbox, listen(),react() will get a value that is hard-coded in the server side to show up in this infobox.

To get the dashboard to display boxes, I'm using header = tagList(useShinydashboard()) . My guess is this useShinydashboard() is the culprit.

I thought this comment might be relevant:

Your code using lapply and the navbarPage doesn't generate the UI in the proper namespace, since when using the navbarPage construct your modules are "one level deeper".

The script:

library(shiny)
library(shinydashboard)
library(shinydashboardPlus)
library(shinyWidgets)
#library(shinyjs)
  
side_width <- 5

#completing the ui part with dashboardPage
ui <- navbarPage(fluid = TRUE,
             theme = shinythemes::shinytheme("flatly"),
             collapsible = TRUE, 
             header = tagList(
                          useShinydashboard()
                               ),
             tabPanel("START"),
             tabPanel("Home Dashboard",
                 value = "Tab1",
                 # useShinyjs(),  
                 fluidRow(
                   column(4,
        # Selection Input ---------------------------------------------------------
                   selectInput(inputId = "AY","Academic Year",
                               multiple = T,
                               choices = unique(INDGEN$AcademicYear),
                               selected = unique(INDGEN$AcademicYear)
                               )),
                    column(4,
                           selectInput(inputId = "State","Select State",
                               choices = c("State","States"))),
                    column(4,
                           selectInput(inputId = "Program","Select Program",
                               choices = c("Program","Programs")))
                 ),
                 fluidRow(column(12,
                   box(width = 4,
                              infoBox("Who?",
                                      width = 12,color = "blue",
                                      fill = F)
                          ),
                   box(width = 4,
                       infoBox("Where?", width = 12,color = "blue",
                               fill = F)
                          ),
                   box(width = 4,
                       infoBox("What?", width = 12,color = "blue",
                               fill = F))
                   )),

              # UI Box R1 ---------------------------------------------------------------
                 fluidRow(column(12,
                                box(width = 4,
                                    # uiOutput(infoBoxOutput("BOX1",width = NULL)),
                                     infoBox("Participants Trained", value =                                          
                                     renderText("AYval"),
                                             width = 12,color = "blue",
                                             icon = icon("fa-solid fa-people-group"), fill = F)
                         
                                 ),box(width = 4,
                                       infoBox("Training Sites", nrow(data), width = 12,color = "blue",
                                               icon = icon("fa-solid fa-school"), fill = F)

                                 ),box(width = 4,
                                       infoBox("Training Programs Offered", nrow(data), width = 12,color = "blue",
                                               icon = icon("fa-solid fa-book-open-reader"), fill = F))

                 )),
server <- function(input, output,session) {  

output$AYval <- renderText({
   textInput(13)
})

  output$BOX1 <- renderInfoBox({  
       infoBox(title = "Participants Trained", 
              value = 13,
              width = NULL,color = "blue",
              icon = icon("fa-solid fa-people-group"), fill = T) 
              })

    }#Server End
    
    
    shinyApp(ui = ui,server = server,options = list(height =  1440))

Notice the "participant trained" box is empty. That's because that value isn't hard-coded. The rest are.

应用看起来像这样

Here's a small reproducible example of how to change the value contents dynamically:

library(shiny)
library(shinydashboard)
library(shinydashboardPlus)
library(shinyWidgets)

data(iris)

ui <- navbarPage(
  fluid = TRUE,
  theme = shinythemes::shinytheme("flatly"),
  collapsible = TRUE,
  header = tagList(
    useShinydashboard()
  ),
  tabPanel("START"),
  tabPanel(
    title = "Home Dashboard",
    value = "Tab1",
    selectInput("column",
                label = "Select a column",
                choices = c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width")
    ),
    box(
      width = 4,
      infoBoxOutput("test")
    )
  )
)

server <- function(input, output, session) {
  iris_sum <- reactive({
    sum(iris[input$column])
  })
  
  output$test <- shinydashboard::renderInfoBox({
    infoBox(
      title = "Where?",
      value = iris_sum(),
      width = 12,
      color = "blue",
      fill  = F
    )
  })
}

shinyApp(ui, server)

在此处输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM