在Shiny服务器启动时触发selectInput的Shiny R observeEvent

时间:2017-10-01 20:11:19

标签: r shiny

以下是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。有人可以解释一下这种行为吗?

1 个答案:

答案 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