【问题标题】:How to pass button value to another module? Promise evaluation error如何将按钮值传递给另一个模块?承诺评估错误
【发布时间】:2021-07-19 20:52:32
【问题描述】:

我想将按钮值传递给mod_test_server 并使用renderPrintmod_test_server 中显示它。不知道为什么我只能传递一次它的值。下一次点击不会导致任何动作 - 没有值传递。我在控制台中看到的是这个奇怪的错误:

'renderPrint(...)' 中的警告:重新启动中断的 Promise 评估

我正在寻找解决方案,我认为它与承诺有关,但我从未遇到过这样的问题并且使用了大量的反应性。为什么会发生?以及如何让它发挥作用?

这是可重现的示例:

library(shiny)
library(dplyr)


moduleServer <- function(id, module) {
   callModule(module, id)
}

# UI - btn #
mod_btn_UI <- function(id) {
   ns <- NS(id)
   
   actionBttn(ns("btn"), "Click me")
}

# Server - btn #
mod_btn_server <- function(id){
   moduleServer(id, function(input, output, session) {
      
      return(reactive({input$btn}))
   })
}

# UI - table #
mod_test_UI <- function(id) {
   ns <- NS(id)
   
   verbatimTextOutput(ns("myBtn"))
}

# Server - table #
mod_test_server <- function(id, btn){
   moduleServer(id, function(input, output, session) {
      ns <- session$ns

      output$myBtn <- renderPrint({btn})
   })
}


# App #
ui <- fluidPage(
   
   tagList(
      mod_btn_UI("btn"),
      mod_test_UI("test")
   )
)

server <- function(input, output, session) {
   
   button <- mod_btn_server("btn")
   btnClicked <- eventReactive(button(),{
                                button()})
   
   mod_test_server("test", btnClicked())   

}

shinyApp(ui = ui, server = server)

【问题讨论】:

    标签: r shiny shiny-reactivity


    【解决方案1】:

    btnmod_test_server 模块中是反应式的。试试这个

    # Server - table #
    mod_test_server <- function(id, btn){
      moduleServer(id, function(input, output, session) {
        ns <- session$ns
        
        output$myBtn <- renderPrint({btn()})
      })
    }
    
    
    # App #
    ui <- fluidPage(
      
      tagList(
        mod_btn_UI("btn"),
        mod_test_UI("test")
      )
    )
    
    server <- function(input, output, session) {
      
      button <- mod_btn_server("btn")
      btnClicked <- eventReactive(button,{
        button})
      
      mod_test_server("test", btnClicked() )   
      
    }
    
    shinyApp(ui = ui, server = server)
    

    【讨论】:

    • 另外,检查buttoneventReactive中的使用方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多