# reactive() - returns values, cacheable
<- reactive({
processed_data expensive_computation(input$dataset)
})# Use: processed_data() - call like function
# observe() - side effects, auto-executes
observe({
updateSelectInput(session, "vars",
choices = names(processed_data()))
})
# observeEvent() - triggered by specific events
observeEvent(input$save_btn, {
save_data(processed_data(), input$filename)
})
Key Differences
reactive(): Returns values • Lazy evaluation • Cacheable
observe(): Side effects • Eager execution • No return value
observeEvent(): Event-triggered • User control • Precise timing