Create dynamic menu output (server side)
Usage
renderMenu(expr, env = parent.frame(), quoted = FALSE, outputArgs = list())
Arguments
- expr
An expression that returns a Shiny tag object,
HTML()
, or a list of such objects.- env
The parent environment for the reactive expression. By default, this is the calling environment, the same as when defining an ordinary non-reactive expression. If
expr
is a quosure andquoted
isTRUE
, thenenv
is ignored.- quoted
If it is
TRUE
, then thequote()
ed value ofexpr
will be used whenexpr
is evaluated. Ifexpr
is a quosure and you would like to use its expression as a value forexpr
, then you must setquoted
toTRUE
.- outputArgs
A list of arguments to be passed through to the implicit call to
uiOutput()
whenrenderUI
is used in an interactive R Markdown document.
See also
menuOutput
for the corresponding client side function
and examples.
Other menu outputs:
dropdownMenuOutput()
,
menuItemOutput()
,
menuOutput()
,
sidebarMenuOutput()
Examples
## Only run these examples in interactive R sessions
if (interactive()) {
library(shiny)
library(bs4Dash)
messageData <- data.frame(
from = c("Admininstrator", "New User", "Support"),
message = c(
"Sales are steady this month.",
"How do I register?",
"The new server is ready."
),
stringsAsFactors = FALSE
)
# ========== Dynamic dropdownMenu ==========
ui <- dashboardPage(
dashboardHeader(
title = "Dynamic menus",
dropdownMenuOutput("messageMenu")
),
dashboardSidebar(),
dashboardBody(
fluidRow(
box(
title = "Controls",
sliderInput("slider", "Number of observations:", 1, 100, 50)
)
)
)
)
server <- function(input, output) {
output$messageMenu <- renderMenu({
# Code to generate each of the messageItems here, in a list. messageData
# is a data frame with two columns, 'from' and 'message'.
# Also add on slider value to the message content, so that messages update.
msgs <- apply(messageData, 1, function(row) {
messageItem(
from = row[["from"]],
message = paste(row[["message"]], input$slider)
)
})
dropdownMenu(type = "messages", .list = msgs)
})
}
shinyApp(ui, server)
# ========== Dynamic sidebarMenu ==========
ui <- dashboardPage(
dashboardHeader(title = "Dynamic sidebar"),
dashboardSidebar(
sidebarMenuOutput("menu")
),
dashboardBody()
)
server <- function(input, output) {
output$menu <- renderMenu({
sidebarMenu(
menuItem("Menu item", icon = icon("calendar-days"))
)
})
}
shinyApp(ui, server)
}