# reactive() - returns values, cacheable
processed_data <- reactive({
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
