将全局输入通过管道传输到 Shiny 模块

Piping a global input into a Shiny module

假设我有以下 Shiny 模块,它没有按我的预期工作:

library(shiny)

# module
module_ui <- function(id) {
  ns <- NS(id)
  uiOutput(ns("choose"))
}
module_server <- function(input, output, session) {
  output$choose <- renderUI({
    selectInput(inputId = "option", 
                label = "choose your option",
                choices = c("a", "b", input$entered_text))
  })
}
# ui and server
ui <- fluidPage(
  textInput("entered_text", label = "Enter a custom option:"),
  module_ui("xyz")
)
server <- function(input, output, session) {
  callModule(module_server, "xyz")
}
shinyApp(ui, server)

如何将全局输入 input$entered_text(第 10 行)通过管道传输到模块中,以便用户输入的文本显示为 selectInput [=20= 上的选项]?

我想我应该使用 reactive(),但我一定是做错了什么。

确实,您应该使用 reactive() 并将 entered_text 的结果传递给您的模块,例如:

library(shiny)

# module
module_ui <- function(id) {
  ns <- NS(id)
  uiOutput(ns("choose"))
}
module_server <- function(input, output, session, et) {
  output$choose <- renderUI({
    selectInput(inputId = "option", 
                label = "choose your option",
                choices = c("a", "b", et()))
  })
}
# ui and server
ui <- fluidPage(
  textInput("entered_text", label = "Enter a custom option:"),
  module_ui("xyz")
)
server <- function(input, output, session) {
  et <- reactive(input$entered_text)
  callModule(module_server, "xyz", et)
}
shinyApp(ui, server)