【发布时间】:2019-01-24 16:35:42
【问题描述】:
我将 Shiny 库更新到 1.1.0 版,我注意到 selectInput/selectizeInput 和 observeEvent/eventReactive 有一些非常奇怪的行为。
当我按退格键并清除下拉菜单的内容时出现问题。在之前的 Shiny 版本中,退格键与 eventReactive 相结合,反应式表达式不会计算(我猜它会将其视为 NULL)观察,反应式会计算所需的值。
req() 的行为也很奇怪,在下面的示例 1 中,如果我们按下退格键并清除输入,则会触发 renderTable,但当 req(input$variable) 为空时,表格会消失。在以前的版本中,如果 Shiny 我相信桌子会保持不变。
复制代码:
示例 1
shinyApp(
ui = fluidPage(
selectizeInput("variable", "Variable:",
c("Cylinders" = "cyl",
"Transmission" = "am",
"Gears" = "gear")),
tableOutput("data")
),
server = function(input, output) {
observeEvent(input$variable,{
cat("Printing: ",input$variable,"\n")
})
output$data <- renderTable({
req(input$variable)
Sys.sleep(2)
mtcars[, c("mpg", input$variable), drop = FALSE]
}, rownames = TRUE)
}
)
或
示例 2
这看起来不错,但如果您注意到按下退格键时仍会调用 renderTable。如果这是一个昂贵的计算,那将是不受欢迎的行为。
shinyApp(
ui = fluidPage(
selectInput("variable", "Variable:",
c("Cylinders" = "cyl",
"Transmission" = "am",
"Gears" = "gear")),
tableOutput("data")
),
server = function(input, output) {
observeEvent(input$variable,{
cat("Printing: ",input$variable,"\n")
})
output$data <- renderTable({
req(input$variable)
Sys.sleep(2)
mtcars[, c("mpg", input$variable), drop = FALSE]
}, rownames = TRUE)
}
)
我想要的行为:当按下退格键清除菜单时,observeEvents 和 eventReactive 没有被触发。
【问题讨论】:
标签: r shiny selectize.js