R Shiny:如何保存模块的返回值?

R Shiny: How to Save Returned Value from a Module?

我有一个简单的闪亮模块,我想从两个滑块输入中获取总和:

模块代码为:

模块

custSliderGroupInput <- function(id,slider1Name,slider2Name){
    ns <- NS(id)
    tagList(sliderInput(ns("slider1"),slider1Name,1,100,50),
            sliderInput(ns("slider2"),slider2Name,1,20,10))
}

custSliderGroup <- function(input,output,session){
    rv <- reactiveVal()
    observeEvent(c(input$slider1,input$slider2),{
        rv <- reactive({input$slider1 + input$slider2})
        print(rv())
        return(list(result = rv()))
    })
}

在我的 app.R 中,我想显示使用 textOutput 的结果,但它不起作用并且没有显示任何错误。 (尽管该值确实打印在控制台中。)

应用程序

library(shiny)
ui <- fluidPage(
        custSliderGroupInput("myslider","A","B"),
        textOutput("text")
    )


server <- function(input, output,session){
    output$text <- renderText({
        callModule(custSliderGroup,"myslider")$result
    })
}

shinyApp(ui = ui, server = server)

我在 Google 和 Whosebug 上进行了搜索,但所有解决方案都不起作用。

消息确实打印在控制台中:

但是 UI 上没有任何显示:

我通过这样做以某种方式解决了它:

模块:

custSliderGroupInput <- function(id,slider1Name,slider2Name){
    ns <- NS(id)
    tagList(sliderInput(ns("slider1"),slider1Name,1,100,50),
            sliderInput(ns("slider2"),slider2Name,1,20,10))
}

custSliderGroup <- function(input,output,session){
    rv <- input$slider1 + input$slider2
    return(rv)
}

应用程序

ui <- fluidPage(
        custSliderGroupInput("myslider","A","B"),
        textOutput("text")
    )


server <- function(input, output,session){
    output$text <- renderText({
        callModule(custSliderGroup,"myslider")
    })
}

shinyApp(ui = ui, server = server)

我不知道为什么,但似乎使用 reactive()observeEvent() 等功能会使模块环境过于复杂,弊大于利。它只是通过简化代码来工作。如果有人知道这在理论上是如何工作或不起作用的,请 post 你的答案!

非常感谢!