我已经阅读了几次有关反应式编程的Shiny文档,但是我无法正确理解observeEvent
和eventReactive
之间的区别。
该文件说:
在我尝试过的所有情况下,我都发现使用observeEvent
和eventReactive
之间没有区别(无论我使用什么功能,该代码都能正常工作,并且对性能没有明显影响)。
您能帮我弄清楚两者的真正区别是什么?理想情况下,我希望提供一些示例来说明它们何时可以互换,一个示例何时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
触发