闪亮模块中带有 updateMaterialSwitch 的 observeEvent 不更新输入
observeEvent with updateMaterialSwitch in shiny module not updating input
我想用 observeEvent 更新 shiny 模块中的 materialSwitch,事件已触发,但 updateMaterialSwitch 不会更改输入值。我的代码片段:
# app server
app_server <- function(input, output, session) {
r <- reactiveValues()
observe(r$is_load <- is_load()) # basic reactive true/false - switching according to condition
callModule(mod_1_server, "1", r = r)
}
# mod_1_server
mod_1_server <- function(input, output, session, r) {
output$switch_uncumulate_tagvals <- renderUI({
materialSwitch(
inputId = "uncumulate_tagvals",
label = "label",
value = FALSE,
status = "warning"
)
})
observeEvent(req(r$is_load() == TRUE), {
updateMaterialSwitch(session = session,
inputId = "uncumulate_tagvals",
value = TRUE)
})
observeEvent(req(r$is_load() == FALSE), {
updateMaterialSwitch(session = session,
inputId = "uncumulate_tagvals",
value = FALSE)
})
}
当 observeEvents 在 app_server 时,一切正常。当我将它们移动到 mod_1_server 时,事件被触发但 input$uncumulate_tagvals(我的 inputId)的预期值永远不会改变。我的猜测是会话可能有问题,但我不知道如何解决。有什么建议吗?
我认为问题出在缺少命名空间规范,使用 session$ns()
# mod_1_server
mod_1_server <- function(input, output, session, r) {
# namespace fonction
ns <- session$ns
output$switch_uncumulate_tagvals <- renderUI({
materialSwitch(
inputId = ns("uncumulate_tagvals"),
label = "label",
value = FALSE,
status = "warning"
)
})
observeEvent(req(r$is_load() == TRUE), {
updateMaterialSwitch(session = session,
inputId = "uncumulate_tagvals",
value = TRUE)
})
observeEvent(req(r$is_load() == FALSE), {
updateMaterialSwitch(session = session,
inputId = "uncumulate_tagvals",
value = FALSE)
})
}
如果您需要更多关于如何转换为模块的信息,您可以阅读这篇博客post:https://rtask.thinkr.fr/communication-between-modules-and-its-whims/
我想用 observeEvent 更新 shiny 模块中的 materialSwitch,事件已触发,但 updateMaterialSwitch 不会更改输入值。我的代码片段:
# app server
app_server <- function(input, output, session) {
r <- reactiveValues()
observe(r$is_load <- is_load()) # basic reactive true/false - switching according to condition
callModule(mod_1_server, "1", r = r)
}
# mod_1_server
mod_1_server <- function(input, output, session, r) {
output$switch_uncumulate_tagvals <- renderUI({
materialSwitch(
inputId = "uncumulate_tagvals",
label = "label",
value = FALSE,
status = "warning"
)
})
observeEvent(req(r$is_load() == TRUE), {
updateMaterialSwitch(session = session,
inputId = "uncumulate_tagvals",
value = TRUE)
})
observeEvent(req(r$is_load() == FALSE), {
updateMaterialSwitch(session = session,
inputId = "uncumulate_tagvals",
value = FALSE)
})
}
当 observeEvents 在 app_server 时,一切正常。当我将它们移动到 mod_1_server 时,事件被触发但 input$uncumulate_tagvals(我的 inputId)的预期值永远不会改变。我的猜测是会话可能有问题,但我不知道如何解决。有什么建议吗?
我认为问题出在缺少命名空间规范,使用 session$ns()
# mod_1_server
mod_1_server <- function(input, output, session, r) {
# namespace fonction
ns <- session$ns
output$switch_uncumulate_tagvals <- renderUI({
materialSwitch(
inputId = ns("uncumulate_tagvals"),
label = "label",
value = FALSE,
status = "warning"
)
})
observeEvent(req(r$is_load() == TRUE), {
updateMaterialSwitch(session = session,
inputId = "uncumulate_tagvals",
value = TRUE)
})
observeEvent(req(r$is_load() == FALSE), {
updateMaterialSwitch(session = session,
inputId = "uncumulate_tagvals",
value = FALSE)
})
}
如果您需要更多关于如何转换为模块的信息,您可以阅读这篇博客post:https://rtask.thinkr.fr/communication-between-modules-and-its-whims/