将响应服务器值传递给模块

时间:2019-04-20 12:41:15

标签: r shiny shiny-reactivity

我有一个具有服务器功能的闪亮应用程序;

shinyServer(function(input, output) {
 chosen_fam <- reactive({ input$fam })

  output$newui <- renderUI({  NewProductUI("newproduct", fam = chosen_fam()) })
  output$newbtn <- renderUI({ NewProductButtonUI("newproduct", fam =  chosen_fam()) })

  callModule(NewProduct, id = "newproduct", fam =  chosen_fam())
})

在NewProduct模块内部,有类似以下内容:

NewProduct <- function(input, output, session, fam){
  observeEvent(input$submitnew, {
    print(paste0("Adding.... ", fam))

    row <- c(fam, input$variable)
    upload_to_googlesheets(token, row)
})

根据所选择的系列呈现UI,并且服务器模块也根据系列执行不同的操作。

渲染UI似乎工作正常,但是callModule中的“ fam”变量不会更新(因此,它始终是第一个选择的族的结果)。输入中的变量可以正常运行,因此我想这与范围界定有关(它可能正在“ newproduct”命名空间中寻找“ fam”?)。

如何明确告诉callModule使用会话名称空间中的反应式表达式?还是有一种方法可以将fam变量添加到“ newproduct”命名空间?

1 个答案:

答案 0 :(得分:0)

您必须给电抗导体本身

callModule(NewProduct, id = "newproduct", fam =  chosen_fam)

(无括号)。并在模块中:

row <- c(fam(), input$variable)

(括号)。