Struct leptos_reactive::signal_prelude::RwSignal
source · pub struct RwSignal<T>where
T: 'static,{ /* private fields */ }
Expand description
A signal that combines the getter and setter into one value, rather than separating them into a ReadSignal and a WriteSignal. You may prefer this its style, or it may be easier to pass around in a context or as a function argument.
Core Trait Implementations
.get()
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.
.set()
sets the signal’s value, and notifies all subscribers that the signal’s value has changed. to subscribe to the signal, and to re-run whenever the value of the signal changes..set_untracked()
sets the signal’s value without notifying its subscribers.
.update()
mutates the signal’s value in place and notifies all subscribers that the signal’s value has changed..update_untracked()
mutates the signal’s value in place without notifying its subscribers.
.to_stream()
converts the signal to anasync
stream of values.
let count = create_rw_signal(cx, 0);
// ✅ set the value
count.set(1);
assert_eq!(count(), 1);
// ❌ don't try to call the getter within the setter
// count.set(count.get() + 1);
// ✅ instead, use .update() to mutate the value in place
count.update(|count: &mut i32| *count += 1);
assert_eq!(count(), 2);
Implementations§
source§impl<T> RwSignal<T>
impl<T> RwSignal<T>
sourcepub fn read_only(&self) -> ReadSignal<T>
pub fn read_only(&self) -> ReadSignal<T>
Returns a read-only handle to the signal.
Useful if you’re trying to give read access to another component but ensure that it can’t write to the signal and cause other parts of the DOM to update.
let count = create_rw_signal(cx, 0);
let read_count = count.read_only();
assert_eq!(count(), 0);
assert_eq!(read_count(), 0);
count.set(1);
assert_eq!(count(), 1);
assert_eq!(read_count(), 1);
sourcepub fn write_only(&self) -> WriteSignal<T>
pub fn write_only(&self) -> WriteSignal<T>
Returns a write-only handle to the signal.
Useful if you’re trying to give write access to another component, or split an
RwSignal
into a ReadSignal and a WriteSignal.
let count = create_rw_signal(cx, 0);
let set_count = count.write_only();
assert_eq!(count(), 0);
set_count(1);
assert_eq!(count(), 1);
sourcepub fn split(&self) -> (ReadSignal<T>, WriteSignal<T>)
pub fn split(&self) -> (ReadSignal<T>, WriteSignal<T>)
Splits an RwSignal
into its getter and setter.
let count = create_rw_signal(cx, 0);
let (get_count, set_count) = count.split();
assert_eq!(count(), 0);
assert_eq!(get_count(), 0);
set_count(1);
assert_eq!(count(), 1);
assert_eq!(get_count(), 1);
Trait Implementations§
source§impl<T> From<RwSignal<T>> for MaybeSignal<T>
impl<T> From<RwSignal<T>> for MaybeSignal<T>
source§impl<T> From<RwSignal<T>> for SignalSetter<T>
impl<T> From<RwSignal<T>> for SignalSetter<T>
source§impl<T> PartialEq<RwSignal<T>> for RwSignal<T>where
T: 'static + PartialEq,
impl<T> PartialEq<RwSignal<T>> for RwSignal<T>where T: 'static + PartialEq,
source§impl<T> SignalDispose for RwSignal<T>
impl<T> SignalDispose for RwSignal<T>
source§impl<T: Clone> SignalGet<T> for RwSignal<T>
impl<T: Clone> SignalGet<T> for RwSignal<T>
Examples
let count = create_rw_signal(cx, 0);
assert_eq!(count.get(), 0);
// count() is shorthand for count.get()
assert_eq!(count(), 0);
source§impl<T: Clone> SignalGetUntracked<T> for RwSignal<T>
impl<T: Clone> SignalGetUntracked<T> for RwSignal<T>
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> SignalSet<T> for RwSignal<T>
impl<T> SignalSet<T> for RwSignal<T>
Examples
let count = create_rw_signal(cx, 0);
assert_eq!(count(), 0);
count.set(1);
assert_eq!(count(), 1);
source§impl<T> SignalSetUntracked<T> for RwSignal<T>
impl<T> SignalSetUntracked<T> for RwSignal<T>
source§fn set_untracked(&self, new_value: T)
fn set_untracked(&self, new_value: T)
Sets the signal’s value without notifying dependents.
source§fn try_set_untracked(&self, new_value: T) -> Option<T>
fn try_set_untracked(&self, new_value: T) -> Option<T>
Attempts to set the signal if it’s still valid. Returns
None
if the signal was set, [Some(T)
] otherwise.source§impl<T: Clone> SignalStream<T> for RwSignal<T>
impl<T: Clone> SignalStream<T> for RwSignal<T>
source§impl<T> SignalUpdate<T> for RwSignal<T>
impl<T> SignalUpdate<T> for RwSignal<T>
Examples
let count = create_rw_signal(cx, 0);
// notifies subscribers
count.update(|n| *n = 1); // it's easier just to call set_count(1), though!
assert_eq!(count(), 1);
// you can include arbitrary logic in this update function
// also notifies subscribers, even though the value hasn't changed
count.update(|n| {
if *n > 3 {
*n += 1
}
});
assert_eq!(count(), 1);
source§fn update(&self, f: impl FnOnce(&mut T))
fn update(&self, f: impl FnOnce(&mut T))
Applies a function to the current value to mutate it in place
and notifies subscribers that the signal has changed. Read more
source§impl<T> SignalUpdateUntracked<T> for RwSignal<T>
impl<T> SignalUpdateUntracked<T> for RwSignal<T>
source§fn update_untracked(&self, f: impl FnOnce(&mut T))
fn update_untracked(&self, f: impl FnOnce(&mut T))
Runs the provided closure with a mutable reference to the current
value without notifying dependents.
source§fn update_returning_untracked<U>(
&self,
f: impl FnOnce(&mut T) -> U
) -> Option<U>
fn update_returning_untracked<U>( &self, f: impl FnOnce(&mut T) -> U ) -> Option<U>
👎Deprecated: Please use
try_update_untracked
instead. This method will be removed in a future version of leptos
Runs the provided closure with a mutable reference to the current
value without notifying dependents and returns
the value the closure returned.
source§impl<T> SignalWith<T> for RwSignal<T>
impl<T> SignalWith<T> for RwSignal<T>
Examples
let name = create_rw_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');
name.set("Bob".to_string());
assert_eq!(first_char(), 'B');
source§impl<T> SignalWithUntracked<T> for RwSignal<T>
impl<T> SignalWithUntracked<T> for RwSignal<T>
impl<T> Copy for RwSignal<T>
impl<T> Eq for RwSignal<T>where T: 'static + Eq,
impl<T> StructuralEq for RwSignal<T>where T: 'static,
impl<T> StructuralPartialEq for RwSignal<T>where T: 'static,
Auto Trait Implementations§
impl<T> RefUnwindSafe for RwSignal<T>where T: RefUnwindSafe,
impl<T> Send for RwSignal<T>where T: Send,
impl<T> Sync for RwSignal<T>where T: Sync,
impl<T> Unpin for RwSignal<T>where T: Unpin,
impl<T> UnwindSafe for RwSignal<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.