Skip to main content

Owner

Struct Owner 

Source
pub struct Owner { /* private fields */ }
Expand description

A reactive owner, which manages

  1. the cancelation of Effects,
  2. providing and accessing environment data via provide_context and use_context,
  3. running cleanup functions defined via Owner::on_cleanup, and
  4. an arena storage system to provide Copy handles via ArenaItem, which is what allows types like RwSignal, Memo, and so on to be Copy.

Every effect and computed reactive value has an associated Owner. While it is running, this is marked as the current Owner. Whenever it re-runs, this Owner is cleared by calling Owner::with_cleanup. This runs cleanup functions, cancels any Effects created during the last run, drops signals stored in the arena, and so on, because those effects and signals will be re-created as needed during the next run.

When the owner is ultimately dropped, it will clean up its owned resources in the same way.

The “current owner” is set on the thread-local basis: whenever one of these reactive nodes is running, it will set the current owner on its thread with Owner::with or Owner::set, allowing other reactive nodes implicitly to access the fact that it is currently the owner.

For a longer discussion of the ownership model, see here.

Implementations§

Source§

impl Owner

Source

pub fn use_context_bidirectional<T>(&self) -> Option<T>
where T: Clone + 'static,

Searches for items stored in context in either direction, either among parents or among descendants.

Source§

impl Owner

Source

pub fn debug_id(&self) -> usize

Returns a unique identifier for this owner, which can be used to identify it for debugging purposes.

Intended for debugging only; this is not guaranteed to be stable between runs.

Source

pub fn ancestry(&self) -> Vec<usize>

Returns the list of parents, grandparents, and ancestors, with values corresponding to Owner::debug_id for each.

Intended for debugging only; this is not guaranteed to be stable between runs.

Source

pub fn new() -> Owner

Creates a new Owner and registers it as a child of the current Owner, if there is one.

Source

pub fn new_root( shared_context: Option<Arc<dyn SharedContext + Send + Sync>>, ) -> Owner

Creates a new “root” context with the given SharedContext, which allows sharing data between the server and client.

Only one SharedContext needs to be created per request, and will be automatically shared by any other Owners created under this one.

Source

pub fn child(&self) -> Owner

Creates a new Owner that is the child of the current Owner, if any.

Source

pub fn set(&self)

Sets this as the current Owner.

Source

pub fn with<T>(&self, fun: impl FnOnce() -> T) -> T

Runs the given function with this as the current Owner.

Source

pub fn with_cleanup<T>(&self, fun: impl FnOnce() -> T) -> T

Cleans up this owner, the given function with this as the current Owner.

Source

pub fn cleanup(&self)

Cleans up this owner in the following order:

  1. Runs cleanup on all children,
  2. Runs all cleanup functions registered with Owner::on_cleanup,
  3. Drops the values of any arena-allocated ArenaItems.
Source

pub fn on_cleanup(fun: impl FnOnce() + Send + Sync + 'static)

Registers a function to be run the next time the current owner is cleaned up.

Because the ownership model is associated with reactive nodes, each “decision point” in an application tends to have a separate Owner: as a result, these cleanup functions often fill the same need as an “on unmount” function in other UI approaches, etc.

Source

pub fn current() -> Option<Owner>

Returns the current Owner, if any.

Source

pub fn shared_context(&self) -> Option<Arc<dyn SharedContext + Send + Sync>>

Returns the SharedContext associated with this owner, if any.

Source

pub fn unset(self)

Removes this from its state as the thread-local owner and drops it.

Source

pub fn current_shared_context() -> Option<Arc<dyn SharedContext + Send + Sync>>

Returns the current SharedContext, if any.

Source

pub fn with_hydration<T>(fun: impl FnOnce() -> T + 'static) -> T

Runs the given function, after indicating that the current SharedContext should be prepared to handle any data created in the function.

Source

pub fn with_no_hydration<T>(fun: impl FnOnce() -> T + 'static) -> T

Runs the given function, after indicating that the current SharedContext should /// not handle data created in this function.

Source

pub fn pause(&self)

Pauses the execution of side effects for this owner, and any of its descendants.

If this owner is the owner for an Effect or RenderEffect, this effect will not run until Owner::resume is called. All children of this effects are also paused.

Any notifications will be ignored; effects that are notified will paused will not run when resumed, until they are notified again by a source after being resumed.

Source

pub fn paused(&self) -> bool

Whether this owner has been paused by Owner::pause.

Source

pub fn resume(&self)

Resumes side effects that have been paused by Owner::pause.

All children will also be resumed.

This will not cause side effects that were notified while paused to run, until they are notified again by a source after being resumed.

Trait Implementations§

Source§

impl Clone for Owner

Source§

fn clone(&self) -> Owner

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Owner

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Default for Owner

Source§

fn default() -> Owner

Returns the “default value” for a type. Read more
Source§

impl PartialEq for Owner

Source§

fn eq(&self, other: &Owner) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more

Auto Trait Implementations§

§

impl !RefUnwindSafe for Owner

§

impl !UnwindSafe for Owner

§

impl Freeze for Owner

§

impl Send for Owner

§

impl Sync for Owner

§

impl Unpin for Owner

§

impl UnsafeUnpin for Owner

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Converts Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Converts &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Converts &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSend for T
where T: Any + Send,

Source§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_sync(self: Box<T>) -> Box<dyn Any + Send + Sync>

Converts Box<Trait> (where Trait: DowncastSync) to Box<dyn Any + Send + Sync>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Converts Arc<Trait> (where Trait: DowncastSync) to Arc<Any>, which can then be downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<S, T> Duplex<S> for T
where T: FromSample<S> + ToSample<S>,

Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<S> FromSample<S> for S

Source§

fn from_sample_(s: S) -> S

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<F, T> IntoSample<T> for F
where T: FromSample<F>,

Source§

fn into_sample(self) -> T

Source§

impl<T> NoneValue for T
where T: Default,

Source§

type NoneType = T

Source§

fn null_value() -> T

The none-equivalent value.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Scalar for T
where T: 'static + Clone + PartialEq + Debug,

Source§

impl<T> SerializableAny for T
where T: 'static + Any + Clone + for<'a> Send + Sync,

Source§

impl<T, S> SimdFrom<T, S> for T
where S: Simd,

Source§

fn simd_from(value: T, _simd: S) -> T

Source§

impl<F, T, S> SimdInto<T, S> for F
where T: SimdFrom<F, S>, S: Simd,

Source§

fn simd_into(self, simd: S) -> T

Source§

impl<T> StorageAccess<T> for T

Source§

fn as_borrowed(&self) -> &T

Borrows the value.
Source§

fn into_taken(self) -> T

Takes the value.
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> ToSample<U> for T
where U: FromSample<T>,

Source§

fn to_sample_(self) -> U

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<S, T> Upcast<T> for S
where T: UpcastFrom<S> + ?Sized, S: ?Sized,

Source§

fn upcast(&self) -> &T
where Self: ErasableGeneric, T: Sized + ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider ref type within the Wasm bindgen generics type system. Read more
Source§

fn upcast_into(self) -> T
where Self: Sized + ErasableGeneric, T: Sized + ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider type within the Wasm bindgen generics type system. Read more
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more