mirror of
https://github.com/rstudio/shiny.git
synced 2026-01-13 08:57:57 -05:00
* Update rituals.yaml * update docs links * Fix 404 link * http://fontawesome.io to https://fontawesome.com * Update links (GitHub Actions) * Update NEWS.md * Only check urls in rc branches * missing paren Co-authored-by: schloerke <schloerke@users.noreply.github.com>
108 lines
2.6 KiB
R
108 lines
2.6 KiB
R
% Generated by roxygen2: do not edit by hand
|
|
% Please edit documentation in R/modules.R
|
|
\name{moduleServer}
|
|
\alias{moduleServer}
|
|
\title{Shiny modules}
|
|
\usage{
|
|
moduleServer(id, module, session = getDefaultReactiveDomain())
|
|
}
|
|
\arguments{
|
|
\item{id}{An ID string that corresponds with the ID used to call the module's
|
|
UI function.}
|
|
|
|
\item{module}{A Shiny module server function.}
|
|
|
|
\item{session}{Session from which to make a child scope (the default should
|
|
almost always be used).}
|
|
}
|
|
\value{
|
|
The return value, if any, from executing the module server function
|
|
}
|
|
\description{
|
|
Shiny's module feature lets you break complicated UI and server logic into
|
|
smaller, self-contained pieces. Compared to large monolithic Shiny apps,
|
|
modules are easier to reuse and easier to reason about. See the article at
|
|
\url{https://shiny.rstudio.com/articles/modules.html} to learn more.
|
|
}
|
|
\details{
|
|
Starting in Shiny 1.5.0, we recommend using \code{moduleServer} instead of
|
|
\code{\link[=callModule]{callModule()}}, because the syntax is a little easier
|
|
to understand, and modules created with \code{moduleServer} can be tested with
|
|
\code{\link[=testServer]{testServer()}}.
|
|
}
|
|
\examples{
|
|
# Define the UI for a module
|
|
counterUI <- function(id, label = "Counter") {
|
|
ns <- NS(id)
|
|
tagList(
|
|
actionButton(ns("button"), label = label),
|
|
verbatimTextOutput(ns("out"))
|
|
)
|
|
}
|
|
|
|
# Define the server logic for a module
|
|
counterServer <- function(id) {
|
|
moduleServer(
|
|
id,
|
|
function(input, output, session) {
|
|
count <- reactiveVal(0)
|
|
observeEvent(input$button, {
|
|
count(count() + 1)
|
|
})
|
|
output$out <- renderText({
|
|
count()
|
|
})
|
|
count
|
|
}
|
|
)
|
|
}
|
|
|
|
# Use the module in an app
|
|
ui <- fluidPage(
|
|
counterUI("counter1", "Counter #1"),
|
|
counterUI("counter2", "Counter #2")
|
|
)
|
|
server <- function(input, output, session) {
|
|
counterServer("counter1")
|
|
counterServer("counter2")
|
|
}
|
|
if (interactive()) {
|
|
shinyApp(ui, server)
|
|
}
|
|
|
|
|
|
|
|
# If you want to pass extra parameters to the module's server logic, you can
|
|
# add them to your function. In this case `prefix` is text that will be
|
|
# printed before the count.
|
|
counterServer2 <- function(id, prefix = NULL) {
|
|
moduleServer(
|
|
id,
|
|
function(input, output, session) {
|
|
count <- reactiveVal(0)
|
|
observeEvent(input$button, {
|
|
count(count() + 1)
|
|
})
|
|
output$out <- renderText({
|
|
paste0(prefix, count())
|
|
})
|
|
count
|
|
}
|
|
)
|
|
}
|
|
|
|
ui <- fluidPage(
|
|
counterUI("counter", "Counter"),
|
|
)
|
|
server <- function(input, output, session) {
|
|
counterServer2("counter", "The current count is: ")
|
|
}
|
|
if (interactive()) {
|
|
shinyApp(ui, server)
|
|
}
|
|
|
|
}
|
|
\seealso{
|
|
\url{https://shiny.rstudio.com/articles/modules.html}
|
|
}
|