Struct leptos::ReadSignal

source ·
pub struct ReadSignal<T>where
    T: 'static,{ /* private fields */ }
Expand description

The getter for a reactive signal.

A signal is a piece of data that may change over time, and notifies other code when it has changed. This is the core primitive of Leptos’s reactive system.

ReadSignal is also Copy and 'static, so it can very easily moved into closures or copied structs.

Core Trait Implementations

  • .get() (or calling the signal as a function) clones the current value of the signal. If you call it within an effect, it will cause that effect to subscribe to the signal, and to re-run whenever the value of the signal changes.
    • .get_untracked() clones the value of the signal without reactively tracking it.
  • .with() allows you to reactively access the signal’s value without cloning by applying a callback function.
    • .with_untracked() allows you to access the signal’s value without reactively tracking it.
  • .to_stream() converts the signal to an async stream of values.

Examples

let (count, set_count) = create_signal(cx, 0);

// ✅ calling the getter clones and returns the value
assert_eq!(count(), 0);

// ✅ calling the setter sets the value
set_count(1);
assert_eq!(count(), 1);

// ❌ don't try to call the getter within the setter
// set_count(count() + 1);

// ✅ instead, use .update() to mutate the value in place
set_count.update(|count: &mut i32| *count += 1);
assert_eq!(count(), 2);

// ✅ you can create "derived signals" with the same Fn() -> T interface
let double_count = move || count() * 2; // signals are `Copy` so you can `move` them anywhere
set_count(0);
assert_eq!(double_count(), 0);
set_count(1);
assert_eq!(double_count(), 2);

Trait Implementations§

source§

impl<T> Clone for ReadSignal<T>

source§

fn clone(&self) -> ReadSignal<T>

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl<T> Debug for ReadSignal<T>where T: Debug + 'static,

source§

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

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

impl<T> From<ReadSignal<T>> for MaybeSignal<T>

source§

fn from(value: ReadSignal<T>) -> MaybeSignal<T>

Converts to this type from the input type.
source§

impl<T> From<ReadSignal<T>> for Signal<T>

source§

fn from(value: ReadSignal<T>) -> Signal<T>

Converts to this type from the input type.
source§

impl<T> Hash for ReadSignal<T>where T: Hash + 'static,

source§

fn hash<__H>(&self, state: &mut __H)where __H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl<T> IntoView for ReadSignal<T>where T: IntoView + Clone,

source§

fn into_view(self, cx: Scope) -> View

Converts the value into View.
source§

impl<T> PartialEq<ReadSignal<T>> for ReadSignal<T>where T: PartialEq<T> + 'static,

source§

fn eq(&self, other: &ReadSignal<T>) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<T> SignalDispose for ReadSignal<T>

source§

fn dispose(self)

Disposes of the signal. This: Read more
source§

impl<T> SignalGet<T> for ReadSignal<T>where T: Clone,

Examples

let (count, set_count) = create_signal(cx, 0);

assert_eq!(count.get(), 0);

// count() is shorthand for count.get()
assert_eq!(count(), 0);
source§

fn get(&self) -> T

Clones and returns the current value of the signal, and subscribes the running effect to this signal. Read more
source§

fn try_get(&self) -> Option<T>

Clones and returns the signal value, returning Some if the signal is still alive, and None otherwise.
source§

impl<T> SignalGetUntracked<T> for ReadSignal<T>where T: Clone,

source§

fn get_untracked(&self) -> T

Gets the signal’s value without creating a dependency on the current scope. Read more
source§

fn try_get_untracked(&self) -> Option<T>

Gets the signal’s value without creating a dependency on the current scope. Returns [Some(T)] if the signal is still valid, None otherwise.
source§

impl<T> SignalStream<T> for ReadSignal<T>where T: Clone,

source§

fn to_stream( &self, cx: Scope ) -> Pin<Box<dyn Stream<Item = T> + 'static, Global>>

Generates a Stream that emits the new value of the signal whenever it changes. Read more
source§

impl<T> SignalWith<T> for ReadSignal<T>

Examples

let (name, set_name) = create_signal(cx, "Alice".to_string());

// ❌ unnecessarily clones the string
let first_char = move || name().chars().next().unwrap();
assert_eq!(first_char(), 'A');

// ✅ gets the first char without cloning the `String`
let first_char = move || name.with(|n| n.chars().next().unwrap());
assert_eq!(first_char(), 'A');
set_name("Bob".to_string());
assert_eq!(first_char(), 'B');
source§

fn with<O>(&self, f: impl FnOnce(&T) -> O) -> O

Applies a function to the current value of the signal, and subscribes the running effect to this signal. Read more
source§

fn try_with<O>(&self, f: impl FnOnce(&T) -> O) -> Option<O>

Applies a function to the current value of the signal, and subscribes the running effect to this signal. Returns Some if the signal is valid and the function ran, otherwise returns None.
source§

fn track(&self)

Subscribes to this signal in the current reactive scope without doing anything with its value.
source§

impl<T> SignalWithUntracked<T> for ReadSignal<T>

source§

fn with_untracked<O>(&self, f: impl FnOnce(&T) -> O) -> O

Runs the provided closure with a reference to the current value without creating a dependency on the current scope. Read more
source§

fn try_with_untracked<O>(&self, f: impl FnOnce(&T) -> O) -> Option<O>

Runs the provided closure with a reference to the current value without creating a dependency on the current scope. Returns [Some(O)] if the signal is still valid, None otherwise.
source§

impl<T> Copy for ReadSignal<T>

source§

impl<T> Eq for ReadSignal<T>where T: Eq + 'static,

source§

impl<T> StructuralEq for ReadSignal<T>where T: 'static,

source§

impl<T> StructuralPartialEq for ReadSignal<T>where T: 'static,

Auto Trait Implementations§

§

impl<T> RefUnwindSafe for ReadSignal<T>where T: RefUnwindSafe,

§

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

§

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

§

impl<T> Unpin for ReadSignal<T>where T: Unpin,

§

impl<T> UnwindSafe for ReadSignal<T>where T: UnwindSafe,

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. Read more
source§

impl<T> CallHasher for Twhere T: Hash + ?Sized,

source§

default fn get_hash<H, B>(value: &H, build_hasher: &B) -> u64where H: Hash + ?Sized, B: BuildHasher,

source§

impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

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 Twhere 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> ToOwned for Twhere T: Clone,

§

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> TryFrom<U> for Twhere U: Into<T>,

§

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 Twhere U: TryFrom<T>,

§

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<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
source§

impl<El> ElementDescriptorBounds for Elwhere El: Debug,