Передача глобального ввода в модуль Shiny - PullRequest
1 голос
/ 08 апреля 2020

Предположим, у меня есть следующий модуль 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 пользовательского интерфейса?

Я думаю, что должен использовать reactive(), но я должен что-то делать не так.

1 Ответ

1 голос
/ 09 апреля 2020

Действительно, вы должны использовать 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)
...