【发布时间】:2021-07-17 03:52:27
【问题描述】:
我想要实现的是访问从子模块传递给父模块的reactive 值。下面的可重现示例显示了这个想法。当我单击mod_server_btn 中的按钮时,其值应在控制台中打印出来(从父模块中):
library(shiny)
mod_ui_btn <- function(id, label = "ui1UI") {
ns <- NS(id)
shinyUI(fluidPage(
actionButton(ns("confirm"), "Submit", class='btn-primary')
))
}
mod_server_btn <- function(input, output, session) {
cond <- reactive({ input$confirm})
return(cond)
}
ui =fluidPage(
mod_ui_btn("test"),
uiOutput("example")
)
server=shinyServer(function(input, output, session) {
value <- callModule(mod_server_btn,"test")
print(value)
#print(value$cond) # these 3 don't work either
#print(value()$cond)
#print(value())
})
shinyApp(ui=ui,server=server)
但是,它不起作用。当我单击按钮时,我在控制台中收到一条文本:reactive({input$confirm}),这不是我想要的,我需要访问按钮值。一般问题是 - 是否有可能访问父模块中的反应值?
编辑: @rbasa,@YBS 感谢您的回答。事实上,在我的真实应用程序中,我需要向父模块返回多个反应值。下面是稍微更改的代码 - 我在 mod_ui_btn 中添加了第二个按钮 - 现在我需要将两个按钮的值返回到 server 模块。我列出了reactives,但无法使用observe 或output$example <- 访问它们:
library(shiny)
mod_ui_btn <- function(id, label = "ui1UI") {
ns <- NS(id)
shinyUI(fluidPage(
actionButton(ns("confirm"), "Submit", class='btn-primary'),
actionButton(ns("confirm2"), "Submit2", class='btn-primary')
))
}
mod_server_btn <- function(input, output, session) {
return(
list(
cond = reactive({ input$confirm}),
cond2 = reactive({ input$confirm2})
)
)
}
ui =fluidPage(
mod_ui_btn("test"),
verbatimTextOutput("example"),
verbatimTextOutput("example2")
)
server=shinyServer(function(input, output, session) {
value <- callModule(mod_server_btn,"test")
output$example <- renderPrint(value$cond)
output$example2 <- renderPrint(value$cond2)
observe({
print(value$cond) #this is how I usually catch reactives - by their name
print(value$cond2)
})
})
shinyApp(ui=ui,server=server)
我通常使用return(list(..some reactive values)) 将多个 ractive 值返回给其他模块,然后在父模块中使用它们的名称捕获。即使我使用观察,它也不起作用。没有返回值。
【问题讨论】:
-
感谢您的链接!