pub struct Signal<T, S = UnsyncStorage>where
T: 'static,
S: Storage<SignalData<T>>,{ /* private fields */ }
Expand description
Creates a new Signal. Signals are a Copy state management solution with automatic dependency tracking.
use dioxus::prelude::*;
use dioxus_signals::*;
#[component]
fn App() -> Element {
let mut count = use_signal(|| 0);
// Because signals have automatic dependency tracking, if you never read them in a component, that component will not be re-rended when the signal is updated.
// The app component will never be rerendered in this example.
rsx! { Child { state: count } }
}
#[component]
fn Child(state: Signal<u32>) -> Element {
let state = *state;
use_future( |()| async move {
// Because the signal is a Copy type, we can use it in an async block without cloning it.
*state.write() += 1;
});
rsx! {
button {
onclick: move |_| *state.write() += 1,
"{state}"
}
}
}
Implementations§
source§impl<T> Signal<T>where
T: 'static,
impl<T> Signal<T>where
T: 'static,
sourcepub fn new(value: T) -> Signal<T>
pub fn new(value: T) -> Signal<T>
Creates a new Signal. Signals are a Copy state management solution with automatic dependency tracking.
sourcepub fn new_in_scope(value: T, owner: ScopeId) -> Signal<T>
pub fn new_in_scope(value: T, owner: ScopeId) -> Signal<T>
Create a new signal with a custom owner scope. The signal will be dropped when the owner scope is dropped instead of the current scope.
sourcepub const fn global(constructor: fn() -> T) -> GlobalSignal<T>
pub const fn global(constructor: fn() -> T) -> GlobalSignal<T>
Creates a new global Signal that can be used in a global static.
source§impl<T> Signal<T>where
T: PartialEq + 'static,
impl<T> Signal<T>where
T: PartialEq + 'static,
sourcepub const fn global_memo(constructor: fn() -> T) -> GlobalMemo<T>
pub const fn global_memo(constructor: fn() -> T) -> GlobalMemo<T>
Creates a new global Signal that can be used in a global static.
sourcepub fn memo(f: impl FnMut() -> T + 'static) -> ReadOnlySignal<T>
pub fn memo(f: impl FnMut() -> T + 'static) -> ReadOnlySignal<T>
Creates a new unsync Selector. The selector will be run immediately and whenever any signal it reads changes.
Selectors can be used to efficiently compute derived data from signals.
sourcepub fn use_maybe_sync_memo<S>(
f: impl FnMut() -> T + 'static
) -> ReadOnlySignal<T, S>where
S: Storage<SignalData<T>>,
pub fn use_maybe_sync_memo<S>(
f: impl FnMut() -> T + 'static
) -> ReadOnlySignal<T, S>where
S: Storage<SignalData<T>>,
Creates a new Selector that may be Sync + Send. The selector will be run immediately and whenever any signal it reads changes.
Selectors can be used to efficiently compute derived data from signals.
source§impl<T, S> Signal<T, S>where
T: 'static,
S: Storage<SignalData<T>>,
impl<T, S> Signal<T, S>where
T: 'static,
S: Storage<SignalData<T>>,
sourcepub fn new_maybe_sync(value: T) -> Signal<T, S>
pub fn new_maybe_sync(value: T) -> Signal<T, S>
Creates a new Signal. Signals are a Copy state management solution with automatic dependency tracking.
sourcepub fn new_with_caller(
value: T,
caller: &'static Location<'static>
) -> Signal<T, S>
pub fn new_with_caller( value: T, caller: &'static Location<'static> ) -> Signal<T, S>
Creates a new Signal. Signals are a Copy state management solution with automatic dependency tracking.
sourcepub fn new_maybe_sync_in_scope(value: T, owner: ScopeId) -> Signal<T, S>
pub fn new_maybe_sync_in_scope(value: T, owner: ScopeId) -> Signal<T, S>
Create a new signal with a custom owner scope. The signal will be dropped when the owner scope is dropped instead of the current scope.
sourcepub fn take(&self) -> T
pub fn take(&self) -> T
Take the value out of the signal, invalidating the signal in the process.
sourcepub fn origin_scope(&self) -> ScopeId
pub fn origin_scope(&self) -> ScopeId
Get the scope the signal was created in.
sourcepub fn id(&self) -> GenerationalBoxId
pub fn id(&self) -> GenerationalBoxId
Get the generational id of the signal.
Trait Implementations§
source§impl<T, S> AddAssign<T> for Signal<T, S>
impl<T, S> AddAssign<T> for Signal<T, S>
source§fn add_assign(&mut self, rhs: T)
fn add_assign(&mut self, rhs: T)
+=
operation. Read moresource§impl<T, S> Deref for Signal<T, S>
impl<T, S> Deref for Signal<T, S>
Allow calling a signal with signal() syntax
Currently only limited to copy types, though could probably specialize for string/arc/rc
source§impl<T, S> DivAssign<T> for Signal<T, S>
impl<T, S> DivAssign<T> for Signal<T, S>
source§fn div_assign(&mut self, rhs: T)
fn div_assign(&mut self, rhs: T)
/=
operation. Read moresource§impl<T, S> From<Signal<T, S>> for ReadOnlySignal<T, S>where
T: 'static,
S: Storage<SignalData<T>>,
impl<T, S> From<Signal<T, S>> for ReadOnlySignal<T, S>where
T: 'static,
S: Storage<SignalData<T>>,
source§fn from(inner: Signal<T, S>) -> ReadOnlySignal<T, S>
fn from(inner: Signal<T, S>) -> ReadOnlySignal<T, S>
source§impl<T> IntoAttributeValue for Signal<T>where
T: Clone + IntoAttributeValue,
impl<T> IntoAttributeValue for Signal<T>where
T: Clone + IntoAttributeValue,
source§fn into_value(self) -> AttributeValue
fn into_value(self) -> AttributeValue
source§impl<T, S> MulAssign<T> for Signal<T, S>
impl<T, S> MulAssign<T> for Signal<T, S>
source§fn mul_assign(&mut self, rhs: T)
fn mul_assign(&mut self, rhs: T)
*=
operation. Read moresource§impl<T, S> PartialEq for Signal<T, S>where
T: 'static,
S: Storage<SignalData<T>>,
impl<T, S> PartialEq for Signal<T, S>where
T: 'static,
S: Storage<SignalData<T>>,
source§impl<T, S> Readable for Signal<T, S>where
S: Storage<SignalData<T>>,
impl<T, S> Readable for Signal<T, S>where
S: Storage<SignalData<T>>,
source§fn peek(
&self
) -> <<Signal<T, S> as Readable>::Storage as AnyStorage>::Ref<<Signal<T, S> as Readable>::Target>
fn peek( &self ) -> <<Signal<T, S> as Readable>::Storage as AnyStorage>::Ref<<Signal<T, S> as Readable>::Target>
Get the current value of the signal. Unlike read, this will not subscribe the current scope to the signal which can cause parts of your UI to not update.
If the signal has been dropped, this will panic.
source§fn try_read(
&self
) -> Result<<<Signal<T, S> as Readable>::Storage as AnyStorage>::Ref<<Signal<T, S> as Readable>::Target>, BorrowError>
fn try_read( &self ) -> Result<<<Signal<T, S> as Readable>::Storage as AnyStorage>::Ref<<Signal<T, S> as Readable>::Target>, BorrowError>
source§fn map<O>(
self,
f: impl Fn(&Self::Target) -> &O + 'static
) -> MappedSignal<O, Self::Storage>
fn map<O>( self, f: impl Fn(&Self::Target) -> &O + 'static ) -> MappedSignal<O, Self::Storage>
source§fn read(&self) -> <Self::Storage as AnyStorage>::Ref<Self::Target>
fn read(&self) -> <Self::Storage as AnyStorage>::Ref<Self::Target>
source§fn with<O>(&self, f: impl FnOnce(&Self::Target) -> O) -> O
fn with<O>(&self, f: impl FnOnce(&Self::Target) -> O) -> O
source§impl<T, S> SubAssign<T> for Signal<T, S>
impl<T, S> SubAssign<T> for Signal<T, S>
source§fn sub_assign(&mut self, rhs: T)
fn sub_assign(&mut self, rhs: T)
-=
operation. Read more