Чего я хочу добиться, так это получить доступ к значению 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})
в консоли, и это не то, что я хочу, мне нужно получить доступ к значению кнопки. Общий вопрос - возможно ли вообще получить доступ к реактивному значению в родительском модуле?
EDIT: @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))
, чтобы вернуть более одного активного значения в другой модуль, а затем поймать их, используя их имена в родительском модуле. Здесь это не работает, даже если я использую наблюдение. Значение не возвращается.