为什么按钮的 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)
我写了一个显示模态对话框的小模块。用户使用对话框选择值,然后单击按钮进行确认。然后将这些值传递给首先调用该模块的应用程序。
当我第一次 运行 模块时,它会按要求完成。第二次我 运行 时,模块内的确认按钮会自动点击(同时,所选值会重置)。 当我第三次 运行 模块时,它按预期完成。第四次,这种奇怪的行为还在继续。等等。
下面的最小代表。
申请:
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)