我已经阅读了几次有关反应式编程的Shiny文档,但是我无法正确理解observeEventeventReactive之间的区别。
该文件说:

在我尝试过的所有情况下,我都发现使用observeEventeventReactive之间没有区别(无论我使用什么功能,该代码都能正常工作,并且对性能没有明显影响)。
您能帮我弄清楚两者的真正区别是什么?理想情况下,我希望提供一些示例来说明它们何时可以互换,一个示例何时observeEvent可以工作,而eventReactive不能工作,反之亦然。

最佳答案

就像@daatali所说的那样,这两个函数用于不同的目的。

ui <- shinyUI(pageWithSidebar(
  headerPanel("eventReactive and observeEvent"),
  sidebarPanel(
    actionButton("evReactiveButton", "eventReactive"),
    br(),
    actionButton("obsEventButton", "observeEvent"),
    br(),
    actionButton("evReactiveButton2", "eventReactive2")
  ),
  mainPanel(
    verbatimTextOutput("eText"),
    verbatimTextOutput("oText")
  )
))

server <- shinyServer(function(input, output) {
  etext <- eventReactive(input$evReactiveButton, {
    runif(1)
  })
  observeEvent(input$obsEventButton,{
    output$oText <- renderText({ runif(1) })
  })
  eventReactive(input$evReactiveButton2,{
    print("Will not print")
    output$oText <- renderText({ runif(1) })
  })
  output$eText <- renderText({
    etext()
  })
})

shinyApp(ui=ui,server=server)
eventReactive创建一个基于eventExpr进行更改的反应值,而observeEvent仅基于eventExpr触发

08-19 09:53