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(0);
// ✅ calling the getter clones and returns the value
assert_eq!(count.get(), 0);
// ✅ calling the setter sets the value
set_count.set(1); // `set_count(1)` on nightly
assert_eq!(count.get(), 1);
// ❌ you could call the getter within the setter
// set_count.set(count.get() + 1);
// ✅ however it's more efficient to use .update() and mutate the value in place
set_count.update(|count: &mut i32| *count += 1);
assert_eq!(count.get(), 2);
// ✅ you can create "derived signals" with the same Fn() -> T interface
let double_count = move || count.get() * 2; // signals are `Copy` so you can `move` them anywhere
set_count.set(0);
assert_eq!(double_count(), 0);
set_count.set(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>
impl<T> Debug for ReadSignal<T>
source§impl<T> From<ReadSignal<T>> for MaybeProp<T>where
T: Clone,
impl<T> From<ReadSignal<T>> for MaybeProp<T>where
T: Clone,
source§fn from(value: ReadSignal<T>) -> MaybeProp<T>
fn from(value: ReadSignal<T>) -> MaybeProp<T>
Converts to this type from the input type.
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>
impl<T> Hash for ReadSignal<T>
source§impl<T> IntoAttribute for ReadSignal<T>where
T: IntoAttribute + Clone,
impl<T> IntoAttribute for ReadSignal<T>where
T: IntoAttribute + Clone,
source§fn into_attribute(self) -> Attribute
fn into_attribute(self) -> Attribute
Converts the object into an
Attribute
.source§fn into_attribute_boxed(self: Box<ReadSignal<T>>) -> Attribute
fn into_attribute_boxed(self: Box<ReadSignal<T>>) -> Attribute
Helper function for dealing with
Box<dyn IntoAttribute>
.source§impl IntoClass for ReadSignal<bool>
impl IntoClass for ReadSignal<bool>
source§fn into_class(self) -> Class
fn into_class(self) -> Class
Converts the object into a
Class
.source§fn into_class_boxed(self: Box<ReadSignal<bool>>) -> Class
fn into_class_boxed(self: Box<ReadSignal<bool>>) -> Class
Helper function for dealing with
Box<dyn IntoClass>
.source§impl<T> IntoProperty for ReadSignal<T>
impl<T> IntoProperty for ReadSignal<T>
source§fn into_property(self) -> Property
fn into_property(self) -> Property
Converts the object into a
Property
.source§fn into_property_boxed(self: Box<ReadSignal<T>>) -> Property
fn into_property_boxed(self: Box<ReadSignal<T>>) -> Property
Helper function for dealing with
Box<dyn IntoProperty>
.source§impl<T> IntoStyle for ReadSignal<T>
impl<T> IntoStyle for ReadSignal<T>
source§fn into_style(self) -> Style
fn into_style(self) -> Style
Converts the object into a
Style
.source§fn into_style_boxed(self: Box<ReadSignal<T>>) -> Style
fn into_style_boxed(self: Box<ReadSignal<T>>) -> Style
Helper function for dealing with
Box<dyn IntoStyle>
.source§impl<T> IntoView for ReadSignal<T>
impl<T> IntoView for ReadSignal<T>
source§impl<T> PartialEq for ReadSignal<T>
impl<T> PartialEq for ReadSignal<T>
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> Serialize for ReadSignal<T>where
T: Serialize,
impl<T> Serialize for ReadSignal<T>where
T: Serialize,
source§fn serialize<S>(
&self,
serializer: S
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
fn serialize<S>(
&self,
serializer: S
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
Serialize this value into the given Serde serializer. Read more
source§impl<T> SignalDispose for ReadSignal<T>
impl<T> SignalDispose for ReadSignal<T>
source§impl<T> SignalGet for ReadSignal<T>where
T: Clone,
impl<T> SignalGet for ReadSignal<T>where
T: Clone,
§Examples
let (count, set_count) = create_signal(0);
assert_eq!(count.get(), 0);
// count() is shorthand for count.get() on `nightly`
// assert_eq!(count.get(), 0);
source§impl<T> SignalGetUntracked for ReadSignal<T>where
T: Clone,
impl<T> SignalGetUntracked 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 for ReadSignal<T>
impl<T> SignalWith for ReadSignal<T>
§Examples
let (name, set_name) = create_signal("Alice".to_string());
// ❌ unnecessarily clones the string
let first_char = move || name.get().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.set("Bob".to_string());
assert_eq!(first_char(), 'B');
source§impl<T> SignalWithUntracked for ReadSignal<T>
impl<T> SignalWithUntracked for ReadSignal<T>
impl<T> Copy for ReadSignal<T>
impl<T> Eq for ReadSignal<T>
Auto Trait Implementations§
impl<T> Freeze for ReadSignal<T>
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<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key
and return true
if they are equal.source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moresource§impl<CustErr, T, Response> IntoRes<Cbor, Response, CustErr> for T
impl<CustErr, T, Response> IntoRes<Cbor, Response, CustErr> for T
source§async fn into_res(self) -> Result<Response, ServerFnError<CustErr>>
async fn into_res(self) -> Result<Response, ServerFnError<CustErr>>
Attempts to serialize the output into an HTTP response.
source§impl<CustErr, T, Response> IntoRes<Json, Response, CustErr> for T
impl<CustErr, T, Response> IntoRes<Json, Response, CustErr> for T
source§async fn into_res(self) -> Result<Response, ServerFnError<CustErr>>
async fn into_res(self) -> Result<Response, ServerFnError<CustErr>>
Attempts to serialize the output into an HTTP response.