R 将全局输入管道化到模块中

R 将全局输入管道化到模块中,r,shiny,shiny-server,shiny-reactivity,R,Shiny,Shiny Server,Shiny Reactivity,假设我有以下闪亮的模块,它不能按我的预期工作: 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",

假设我有以下闪亮的模块,它不能按我的预期工作:

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)
库(闪亮)
#模块

模块ui实际上,您应该使用
reactive()
并将输入的
文本的结果传递给您的模块,如下所示:

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)
库(闪亮)
#模块

哇,这是一个如此简单的解决方案!关键是使用函数格式
et()
作为
selectInput
的参数,谢谢您的回答!