这两款Shiny应用的区别在于,第一款包括
observeEvent(
input$alert,
{
flag(TRUE)
}
)
而在第二个代码中,此代码被替换为以下代码:
observeEvent(
list(input$alert, input$X),
{
flag(TRUE)
}, ignoreInit = TRUE
)
其中input$X
始终为NULL
。
但是这两个应用程序有不同的行为(点击几次按钮)。为什么?我不明白第二个的行为。
library(shiny)
library(shinyWidgets)
ui <- fluidPage(
mainPanel(
actionButton(
inputId = "button",
label = "ALERT"
)
)
)
server1 <- function(input, output, session) {
flag <- reactiveVal(NULL)
observeEvent(
input$button,
{
confirmSweetAlert(
inputId = "alert",
title = "ALERT",
type = "error"
)
}
)
observeEvent(
input$alert,
{
flag(TRUE)
}
)
observeEvent(
flag(),
{
flag(NULL)
sendSweetAlert(
title = "ALERT 2",
type = "error"
)
}
)
}
server2 <- function(input, output, session) {
flag <- reactiveVal(NULL)
observeEvent(
input$button,
{
confirmSweetAlert(
inputId = "alert",
title = "ALERT",
type = "error"
)
}
)
observeEvent(
list(input$alert, input$X),
{
flag(TRUE)
}, ignoreInit = TRUE
)
observeEvent(
flag(),
{
flag(NULL)
sendSweetAlert(
title = "ALERT 2",
type = "error"
)
}
)
}
shinyApp(ui = ui, server = server1)
shinyApp(ui = ui, server = server2)
1条答案
按热度按时间h6my8fg21#
不同的行为是由于
list(NULL, NULL)
不是NULL
(导致flag
被设置为TRUE
):observeEvent
默认使用ignoreNULL = TRUE
。在
server1
中设置ignoreNULL = FALSE
会导致与server2
相同的行为:作为替代,在server2中使用
c(input$alert, input$X)
而不是list(input$alert, input$X)
: