将附加参数传递给 R Shiny 应用程序中的 moduleServer:访问 updateTabsetPanel 的父环境

heds1
  • 从 Shiny 1.5.0 开始,我们鼓励使用moduleServer而不是callModule.
  • 但是,似乎我们无法将其他参数传递给moduleServer(与 不同callModule)。
  • 这是一个问题,因为我想将父会话作为参数传递给moduleServer,以便我可以正确引用父会话,以便updateTabsetPanelrenderUI动态输出中正常工作

这篇文章演示了如何使用callModule将父会话传递到模块中,以便updateTabsetPanel可以引用父会话并相应地更新它。我使用这种方法在这里创建了一个最小的例子。有两个tabPanels,我们试图通过第一个actionLink中的an 导航到第二个first_server模块使用 调用callModule,我们可以将父会话参数作为附加参数传递,允许我们在updateTabsetPanel调用中引用它first_server点击actionLink然后将我们带到第二个模块 UI,正如预期的那样:

library(shiny)

first_ui <- function(id) {
    ns <- NS(id)
    uiOutput(ns("goto_second_link_ui"))
}

second_ui <- function(id) {
    ns <- NS(id)
    p("It worked!")
}

first_server <- function(input, output, session, parent) {
    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"
        )
    })
}

ui <- {
    fluidPage(
        tabsetPanel(id = "main",
            tabPanel(value = "first",
                title = "First module",
                first_ui("first")    
            ),
            tabPanel(value = "second",
                title = "Second module",
                second_ui("second")    
            )
        )
    )
}

server <- function(input, output, session) {
    callModule(first_server, id = "first", parent = session)
}

shinyApp(ui, server)

我已经尝试了几种方法来让它与moduleServer. 我最好的猜测是将父会话一直传递到module参数moduleServer(仅显示相关更改):

first_server <- function(id, parent) {
    moduleServer(id, function(input, output, session, parent = parent) {
        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)
}

当我点击actionLink我不完全理解的时,这会产生一个错误

警告:updateTabsetPanel 中的错误:promise 已经在评估中:递归默认参数引用或更早的问题?

感谢您的阅读和任何建议。

YBS

一旦你删除了moduleServer的额外参数尝试这个

library(shiny)

first_ui <- function(id) {
  ns <- NS(id)
  uiOutput(ns("goto_second_link_ui"))
}

second_ui <- function(id) {
  ns <- NS(id)
  p("It worked!")
}

first_server <- function(id,parent) {
  moduleServer(id, function(input, output, session) {
    ns <- session$ns
    output$goto_second_link_ui <- renderUI({
      actionLink(ns("goto_second"), label = "Go to second module")
    })
    observeEvent(input$goto_second, {
      updateTabsetPanel(parent,
                        inputId = "main",
                        selected = "second"
      )
    })
  })
}

ui <- {
  fluidPage(
    tabsetPanel(id = "main",
                tabPanel(value = "first",
                         title = "First module",
                         first_ui("first")    
                ),
                tabPanel(value = "second",
                         title = "Second module",
                         second_ui("second")    
                )
    )
  )
}

server <- function(input, output, session) {
  first_server("first", parent = session)
}

shinyApp(ui, server)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

VirtualBox 环境中的 R Shiny 应用程序

使用传递给闪亮应用程序的参数将R Shiny应用程序另存为函数

在R Shiny应用程序中访问Javascript变量

尝试在 R Shiny 中将 updateTabsetPanel 与传单标记单击集成?

如何在Shiny应用程序中将表格和绘图作为参数传递给R Markdown?

从网站访问CSV文件并读入R Shiny应用程序

R Shiny中的环境

错误:R的Shiny应用程序中的“数学函数中的非数值参数”

带有Shiny模块的updateTabsetPanel

将 instagram/youtube 嵌入到 Shiny R 应用程序中

将R Shiny应用程序部署为独立应用程序

R Shiny-将selectizeInput作为参数传递给ShinyModule

R Shiny:作为应用程序运行时,为什么源文件中的函数不能访问全局变量?

在R Shiny应用程序中返回HTTP状态代码

R Shiny 应用程序中的外部过滤器

r Shiny应用程序中的URL缩短器

无法在R Shiny应用程序中显示模式警报

带R的Shiny应用程序中的相关输入

在R Shiny应用程序中接受HTTP请求

在 R Shiny 应用程序中嵌入特定推文

在R Shiny应用程序中并排生成UI元素

如何将父函数中的“ ...”参数传递给r中的两个子函数

在R Shiny中将参数传递给renderPlot

将RHandsontable的编辑存储在Shiny应用程序中

如何从闪亮的应用程序将图(renderPlot)作为参数传递给R Markdown?

在Symfony 4应用程序中,如何将环境变量传递给服务类?

访问Shiny模块中的父名称空间

在 Meteor/React 应用程序中访问环境变量

将输出文本从R SHINY存储到应用程序外部的对象