mirror of
https://github.com/rstudio/shiny.git
synced 2026-01-31 09:48:38 -05:00
99 lines
3.6 KiB
R
99 lines
3.6 KiB
R
\name{observe}
|
|
\alias{observe}
|
|
\title{Create a reactive observer}
|
|
\usage{
|
|
observe(x, env = parent.frame(), quoted = FALSE,
|
|
label = NULL, suspended = FALSE, priority = 0)
|
|
}
|
|
\arguments{
|
|
\item{x}{An expression (quoted or unquoted). Any return
|
|
value will be ignored.}
|
|
|
|
\item{env}{The parent environment for the reactive
|
|
expression. By default, this is the calling environment,
|
|
the same as when defining an ordinary non-reactive
|
|
expression.}
|
|
|
|
\item{quoted}{Is the expression quoted? By default, this
|
|
is \code{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()`.}
|
|
|
|
\item{label}{A label for the observer, useful for
|
|
debugging.}
|
|
|
|
\item{suspended}{If \code{TRUE}, start the observer in a
|
|
suspended state. If \code{FALSE} (the default), start in
|
|
a non-suspended state.}
|
|
|
|
\item{priority}{An integer or numeric that controls the
|
|
priority with which this observer should be executed. An
|
|
observer with a given priority level will always execute
|
|
sooner than all observers with a lower priority level.
|
|
Positive, negative, and zero values are allowed.}
|
|
}
|
|
\value{
|
|
An observer reference class object. This object has the
|
|
following methods: \describe{ \item{\code{suspend()}}{
|
|
Causes this observer to stop scheduling flushes
|
|
(re-executions) in response to invalidations. If the
|
|
observer was invalidated prior to this call but it has
|
|
not re-executed yet then that re-execution will still
|
|
occur, because the flush is already scheduled. }
|
|
\item{\code{resume()}}{ Causes this observer to start
|
|
re-executing in response to invalidations. If the
|
|
observer was invalidated while suspended, then it will
|
|
schedule itself for re-execution. }
|
|
\item{\code{setPriority(priority = 0)}}{ Change this
|
|
observer's priority. Note that if the observer is
|
|
currently invalidated, then the change in priority will
|
|
not take effect until the next invalidation--unless the
|
|
observer is also currently suspended, in which case the
|
|
priority change will be effective upon resume. }
|
|
\item{\code{onInvalidate(callback)}}{ Register a callback
|
|
function to run when this observer is invalidated. No
|
|
arguments will be provided to the callback function when
|
|
it is invoked. } }
|
|
}
|
|
\description{
|
|
Creates an observer from the given expression.
|
|
}
|
|
\details{
|
|
An observer is like a reactive expression in that it can
|
|
read reactive values and call reactive expressions, and
|
|
will automatically re-execute when those dependencies
|
|
change. But unlike reactive expressions, it doesn't yield
|
|
a result and can't be used as an input to other reactive
|
|
expressions. Thus, observers are only useful for their
|
|
side effects (for example, performing I/O).
|
|
|
|
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.
|
|
}
|
|
\examples{
|
|
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()
|
|
}
|
|
|