提问人:JohnBones JohnBones 提问时间:12/7/2022 最后编辑:JohnBones JohnBones 更新时间:12/8/2022 访问量:567
在 Shiny/R 中,如何使用从一个模块到另一个模块的输入?
In Shiny/R how to use input from one module into other module?
问:
我需要从 selectInput 中选择一个名称后,此名称将在 mod1_UI 模块上使用。到目前为止,我就是这样做的:
这是我的模块文件:
mod1_UI <- function(id) {
ns <- NS(id)
tagList(h1(uiOutput(ns('titulo_select'))))
}
mod1_Server <- function(id, ui) {
moduleServer(id,
function(input, output, session) {
output$titulo_select <- renderUI({
ui
})
})
}
这是我的应用程序:
library(shiny)
ui <- fluidPage(selectInput(
inputId = 'choices',
label = 'Choices',
choices = c('One Title', 'Second Title')
),
#verbatimTextOutput('verbatim'),
mod1_UI('titulo'))
server <- function(input, output, session) {
choices <- reactive({
input$choices
})
# output$verbatim <- renderText({
# choices()
#})
mod1_Server("titulo", ui = choices())
}
shinyApp(ui, server)
正如你所看到的,没有反应性,我改变了选择选项。它只显示了第一个选项。
我排除了 verbatimOutput 以表明它在 ui 内部是反应式的,但是当我考虑该模块时,它不是。
答:
1赞
YBS
12/8/2022
#1
也许你正在寻找这个。
mod1_UI <- function(id) {
ns <- NS(id)
tagList(
selectInput(
inputId = ns('choices'),
label = 'Choices',
choices = c('One Title', 'Second Title')
),
uiOutput(ns('titulo_select'))
)
}
mod1_Server <- function(id) {
moduleServer(id,
function(input, output, session) {
choices <- reactive({
input$choices
})
output$titulo_select <- renderUI({
choices()
})
})
}
library(shiny)
ui <- fluidPage(
mod1_UI('titulo')
)
server <- function(input, output, session) {
mod1_Server("titulo")
}
shinyApp(ui, server)
评论
0赞
JohnBones JohnBones
12/8/2022
差不多就是这样。select 输入应保留在应用代码中。这个想法是,一旦我更改了选择输入,更改就会发生在模块上
0赞
YBS
12/8/2022
在这种情况下,您可以使用 @Stephane Laurent 的答案。
2赞
Stéphane Laurent
12/8/2022
#2
你必须将电抗导体传递给模块,也就是说不要把括号放进去:
mod1_Server("titulo", ui = choices)
然后在模块中,您必须使用括号:.ui()
评论
mod1_Server("titulo")
ui=choices
ui=choices()
ui()