R Shiny中向moduleServer传递父session实现updateTabsetPanel跨模块更新
报错原因
moduleServer接收的内部服务函数仅支持input、output、session三个固定形参,你在该函数的形参列表中额外添加了parent参数,还设置默认值parent = parent,触发了同名变量递归求值冲突,才会出现你看到的报错。
正确传参方案
所有需要传入模块的额外参数,都直接在外层的模块服务函数中接收即可,moduleServer的内部函数会通过R的闭包特性自动捕获外层作用域的变量,不需要重复声明为内部函数的参数。
修正后的代码如下:
# 修正后的模块服务函数 first_server <- function(id, parent) { moduleServer(id, function(input, output, session) { output$goto_second_link_ui <- renderUI({ actionLink(session$ns("goto_second"), label = "Go to second module") }) observeEvent(input$goto_second, { updateTabsetPanel(parent, inputId = "main", selected = "second" ) }) }) } # 主服务函数无需调整 server <- function(input, output, session) { first_server("first", parent = session) }
修改后点击链接即可正常跳转至第二个tab。
内容的提问来源于stack exchange,提问作者heds1
相关产品推荐
相关产品推荐

