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 anasync
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>
impl<T> Clone for ReadSignal<T>
source§fn clone(&self) -> ReadSignal<T>
fn clone(&self) -> ReadSignal<T>
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moresource§impl<T> Debug for ReadSignal<T>where
T: Debug + 'static,
impl<T> Debug for ReadSignal<T>where T: Debug + 'static,
source§impl<T> From<ReadSignal<T>> for MaybeSignal<T>
impl<T> From<ReadSignal<T>> for MaybeSignal<T>
source§fn from(value: ReadSignal<T>) -> MaybeSignal<T>
fn from(value: ReadSignal<T>) -> MaybeSignal<T>
Converts to this type from the input type.
source§impl<T> From<ReadSignal<T>> for Signal<T>
impl<T> From<ReadSignal<T>> for Signal<T>
source§fn from(value: ReadSignal<T>) -> Signal<T>
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,
impl<T> Hash for ReadSignal<T>where T: Hash + 'static,
source§impl<T> PartialEq<ReadSignal<T>> for ReadSignal<T>where
T: PartialEq<T> + 'static,
impl<T> PartialEq<ReadSignal<T>> for ReadSignal<T>where T: PartialEq<T> + 'static,
source§fn eq(&self, other: &ReadSignal<T>) -> bool
fn eq(&self, other: &ReadSignal<T>) -> bool
This method tests for
self
and other
values to be equal, and is used
by ==
.source§impl<T> SignalDispose for ReadSignal<T>
impl<T> SignalDispose for ReadSignal<T>
source§impl<T> SignalGet<T> for ReadSignal<T>where
T: Clone,
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§impl<T> SignalGetUntracked<T> for ReadSignal<T>where
T: Clone,
impl<T> SignalGetUntracked<T> for ReadSignal<T>where T: Clone,
source§fn get_untracked(&self) -> T
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>
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,
impl<T> SignalStream<T> for ReadSignal<T>where T: Clone,
source§impl<T> SignalWith<T> for ReadSignal<T>
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§impl<T> SignalWithUntracked<T> for ReadSignal<T>
impl<T> SignalWithUntracked<T> for ReadSignal<T>
impl<T> Copy for ReadSignal<T>
impl<T> Eq for ReadSignal<T>where T: Eq + 'static,
impl<T> StructuralEq for ReadSignal<T>where T: 'static,
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> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> CallHasher for Twhere
T: Hash + ?Sized,
impl<T> CallHasher for Twhere T: Hash + ?Sized,
source§impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key
and return true
if they are equal.