observe(x, env = parent.frame(), quoted = FALSE, label = NULL, suspended = FALSE, priority = 0, domain = getDefaultReactiveDomain(), autoDestroy = TRUE, ..stacktraceon = TRUE)
FALSE
.
This is useful when you want to use an expression that is stored in a
variable; to do so, it must be quoted with quote()
.TRUE
, start the observer in a suspended state.
If FALSE
(the default), start in a non-suspended state.TRUE
(the default), the observer will be
automatically destroyed when its domain (if any) ends.stacktrace
.suspend()
resume()
destroy()
setPriority(priority = 0)
setAutoDestroy(autoDestroy)
onInvalidate(callback)
Another contrast between reactive expressions and observers is their execution strategy. Reactive expressions use lazy evaluation; that is, when their dependencies change, they don't re-execute right away but rather wait until they are called by someone else. Indeed, if they are not called then they will never re-execute. In contrast, observers use eager evaluation; as soon as their dependencies change, they schedule themselves to re-execute.
Starting with Shiny 0.10.0, observers are automatically destroyed by default when the domain that owns them ends (e.g. when a Shiny session ends).
values <- reactiveValues(A=1)
obsB <- observe({
print(values$A + 1)
})
# Can use quoted expressions
obsC <- observe(quote({ print(values$A + 2) }), quoted = TRUE)
# To store expressions for later conversion to observe, use quote()
expr_q <- quote({ print(values$A + 3) })
obsD <- observe(expr_q, quoted = TRUE)
# In a normal Shiny app, the web client will trigger flush events. If you
# are at the console, you can force a flush with flushReact()
shiny:::flushReact()
Run the code above in your browser using DataLab