r-如何将按钮值传递给另一个模块?承诺评估错误



我想将按钮值传递给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)

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)

最新更新