以下是Shiny应用程序的示例:
ui.R :
shinyUI(fluidPage(
# Application title
titlePanel("Test select input event"),
sidebarLayout(
sidebarPanel(
selectInput('testSelect', 'Test',choices = c(1,2,3), multiple = FALSE)
),
mainPanel(
)
)
))
server.R :
shinyServer(function(input, output) {
observeEvent(input$testSelect,{ print("I am getting trigerred unnecessarily")})
})
当我启动此应用程序时,控制台日志会立即显示:
聆听http://127.0.0.1:5017聆听 [1]“我越来越不必要了”[/ p>
似乎在应用程序启动时不必要地触发了选择输入上的observeEvent
。有人可以解释一下这种行为吗?
答案 0 :(得分:1)
ignoreInit
中有observeEvent
个参数来处理此类不需要的触发器。以下代码将阻止在启动时显示消息。
library(shiny)
shinyApp(
selectInput('testSelect', 'Test', choices = c(1, 2, 3)),
function(input, output, session){
observeEvent(
input$testSelect, ## eventExpr
{print("I am NOT getting trigerred unnecessarily")}, ## handlerExpr
ignoreInit = TRUE
)
}
)
参数文档(在?observeEvent
中)提供了有关observeEvent
在启动时如何运作的深入见解。
ignoreInit
如果
TRUE
,那么,当首次创建/初始化此observeEvent
时,忽略handlerExpr
(第二个参数),无论它是否应该运行。默认值为FALSE
。见详情。
详细信息部分进一步阐明了这一点。
来自详细信息:默认情况下,
observeEvent
会在创建时正常运行(当时eventExpr
评估为NULL
和{ {1}}是ignoreNULL
)
创建TRUE
时,observeEvent
将具有值input$testSelect
,因此1
(即handlerExpr
命令)将被触发,除非{{ 1}}设置为非默认值print
。