为什么按钮的 observeEvent 被错误触发(第二次)?

Why is an observeEvent of a button is triggered falsely (the second time)?

我写了一个显示模态对话框的小模块。用户使用对话框选择值,然后单击按钮进行确认。然后将这些值传递给首先调用该模块的应用程序。

当我第一次 运行 模块时,它会按要求完成。第二次我 运行 时,模块内的确认按钮会自动点击(同时,所选值会重置)。 当我第三次 运行 模块时,它按预期完成。第四次,这种奇怪的行为还在继续。等等。

下面的最小代表。

申请:

library(shiny)

source("condSelectModule2.R")

ui <- fluidPage(
  condSelectUI("chooseCond"),
  actionButton("makeChoice", "Choose"),
  textOutput("showCond")
)

server <- function(input, output, session) {
  observeEvent(input$makeChoice,  {
               r <- condSelectServer("chooseCond", c(1,2,3))
  
               output$showCond <- renderText(unlist(r()))             
  })
  
  
}

shinyApp(ui, server)

模块:

condSelectUI <- function(id) {}

condSelectServer <- function(id, conds)
  moduleServer(id, function(input, output, session) {
    
    ns <- session$ns
    
    showModal(modalDialog(
      title="Select a number",
      footer=tagList(     fluidRow(
        selectInput(ns("Number"), "Select a number", choices=conds)
      ),
      actionButton(ns("goBtn"), "Ok")
      )))
    
    
    observeEvent(input$goBtn,  {
        print(c(input$Number))
        removeModal()
      }
    )
    
    
    # return value
    
    reactive(input$Number)
    
  })

选项 ignoreInit = TRUE 应该有效。试试这个

observeEvent(input$goBtn,  {
      print(c(input$Number))
      removeModal()
}, ignoreInit = TRUE)