为什么 `observe` 和 `observeEvent` 在输入变量变化时表现不同?
Why does `observe` and `observeEvent` behave differently on change of input variable?
我发现了一个至少在 Shiny 中令人困惑的行为,我想弄清楚它发生的原因。
我有一个闪亮的应用程序,只有一个 selectInput
输入,允许选择多个值 (multiple = TRUE
) 和两个监听输入变量变化的观察者:一个使用 observeEvent
直接在输入变量上,一个只使用 observe
和它体内的输入变量。
奇怪的是,在多个选项中,一个删除了选择器中的所有选项。在这种情况下,只有 observe
代码块会执行,而 observeEvent
不会。
Shiny 为什么要这么做?它应该那样工作吗?
一个最小的工作示例(您只需要取消选择所有变量):
library(shiny)
ui <- fluidPage(
selectInput("select",
label = "Multiple choices",
choices = c(1, 2, 3, 4),
selected = c(1, 2),
multiple = TRUE)
)
server <- function(input, output) {
# Won't execute with no value selected
observeEvent(input$select, {
vec_str <- paste(input$select, collapse = " ")
print(paste("observeEvent:", vec_str))
})
# Will execute with no value selected
observe({
vec_str <- paste(input$select, collapse = " ")
print(paste("observe:", vec_str))
})
}
shinyApp(ui = ui, server = server)
提前致谢:)
observeEvent
中有一个设置允许您在 is.null(input$select)
时忽略大小写。设置参数 ignoreNULL = FALSE
即可获得所需的结果。
library(shiny)
ui <- fluidPage(
selectInput("select",
label = "Multiple choices",
choices = c(1, 2, 3, 4),
selected = c(1, 2),
multiple = TRUE)
)
server <- function(input, output) {
# executes even when input$select is NULL
observeEvent(input$select, {
vec_str <- paste(input$select, collapse = " ")
print(paste("observeEvent:", vec_str))
}, ignoreNULL = FALSE)
# Will execute with no value selected
observe({
vec_str <- paste(input$select, collapse = " ")
print(paste("observe:", vec_str))
})
}
shinyApp(ui = ui, server = server)
我发现了一个至少在 Shiny 中令人困惑的行为,我想弄清楚它发生的原因。
我有一个闪亮的应用程序,只有一个 selectInput
输入,允许选择多个值 (multiple = TRUE
) 和两个监听输入变量变化的观察者:一个使用 observeEvent
直接在输入变量上,一个只使用 observe
和它体内的输入变量。
奇怪的是,在多个选项中,一个删除了选择器中的所有选项。在这种情况下,只有 observe
代码块会执行,而 observeEvent
不会。
Shiny 为什么要这么做?它应该那样工作吗?
一个最小的工作示例(您只需要取消选择所有变量):
library(shiny)
ui <- fluidPage(
selectInput("select",
label = "Multiple choices",
choices = c(1, 2, 3, 4),
selected = c(1, 2),
multiple = TRUE)
)
server <- function(input, output) {
# Won't execute with no value selected
observeEvent(input$select, {
vec_str <- paste(input$select, collapse = " ")
print(paste("observeEvent:", vec_str))
})
# Will execute with no value selected
observe({
vec_str <- paste(input$select, collapse = " ")
print(paste("observe:", vec_str))
})
}
shinyApp(ui = ui, server = server)
提前致谢:)
observeEvent
中有一个设置允许您在 is.null(input$select)
时忽略大小写。设置参数 ignoreNULL = FALSE
即可获得所需的结果。
library(shiny)
ui <- fluidPage(
selectInput("select",
label = "Multiple choices",
choices = c(1, 2, 3, 4),
selected = c(1, 2),
multiple = TRUE)
)
server <- function(input, output) {
# executes even when input$select is NULL
observeEvent(input$select, {
vec_str <- paste(input$select, collapse = " ")
print(paste("observeEvent:", vec_str))
}, ignoreNULL = FALSE)
# Will execute with no value selected
observe({
vec_str <- paste(input$select, collapse = " ")
print(paste("observe:", vec_str))
})
}
shinyApp(ui = ui, server = server)