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§
§impl<T> Signal<T>where
T: 'static,
impl<T> Signal<T>where T: 'static,
pub 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.
pub 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.
pub 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.
§impl<T> Signal<T>where
T: PartialEq + 'static,
impl<T> Signal<T>where T: PartialEq + 'static,
pub const fn global_memo(constructor: fn() -> T) -> GlobalMemo<T>where
T: PartialEq,
pub const fn global_memo(constructor: fn() -> T) -> GlobalMemo<T>where T: PartialEq,
Creates a new global Signal that can be used in a global static.
pub fn selector(f: impl FnMut() -> T + 'static) -> ReadOnlySignal<T>
pub fn selector(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.
pub fn maybe_sync_memo<S>(
f: impl FnMut() -> T + 'static
) -> ReadOnlySignal<T, S>where
S: Storage<SignalData<T>>,
pub fn 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.
§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>>,
pub 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.
pub 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.
pub fn origin_scope(&self) -> ScopeId
pub fn origin_scope(&self) -> ScopeId
Get the scope the signal was created in.
pub fn map<O>(
self,
f: impl Fn(&T) -> &O + 'static
) -> MappedSignal<<S as AnyStorage>::Ref<O>>
pub fn map<O>( self, f: impl Fn(&T) -> &O + 'static ) -> MappedSignal<<S as AnyStorage>::Ref<O>>
Map the signal to a new type.
pub fn id(&self) -> GenerationalBoxId
pub fn id(&self) -> GenerationalBoxId
Get the generational id of the signal.
Trait Implementations§
§impl<T, S> Add<T> for Signal<T, S>where
T: Add<Output = T> + Copy + 'static,
S: Storage<SignalData<T>>,
impl<T, S> Add<T> for Signal<T, S>where T: Add<Output = T> + Copy + 'static, S: Storage<SignalData<T>>,
§impl<T, S> AddAssign<T> for Signal<T, S>where
T: Add<Output = T> + Copy + 'static,
S: Storage<SignalData<T>>,
impl<T, S> AddAssign<T> for Signal<T, S>where T: Add<Output = T> + Copy + 'static, S: Storage<SignalData<T>>,
§fn add_assign(&mut self, rhs: T)
fn add_assign(&mut self, rhs: T)
+=
operation. Read more§impl<T, S> Clone for Signal<T, S>where
T: 'static,
S: Storage<SignalData<T>>,
impl<T, S> Clone for Signal<T, S>where T: 'static, S: Storage<SignalData<T>>,
§impl<T, S> Deref for Signal<T, S>where
T: Clone,
S: Storage<SignalData<T>> + 'static,
impl<T, S> Deref for Signal<T, S>where T: Clone, S: Storage<SignalData<T>> + 'static,
Allow calling a signal with signal() syntax
Currently only limited to copy types, though could probably specialize for string/arc/rc
§impl<T, S> Div<T> for Signal<T, S>where
T: Div<Output = T> + Copy + 'static,
S: Storage<SignalData<T>>,
impl<T, S> Div<T> for Signal<T, S>where T: Div<Output = T> + Copy + 'static, S: Storage<SignalData<T>>,
§impl<T, S> DivAssign<T> for Signal<T, S>where
T: Div<Output = T> + Copy + 'static,
S: Storage<SignalData<T>>,
impl<T, S> DivAssign<T> for Signal<T, S>where T: Div<Output = T> + Copy + 'static, S: Storage<SignalData<T>>,
§fn div_assign(&mut self, rhs: T)
fn div_assign(&mut self, rhs: T)
/=
operation. Read more§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>>,
§fn from(inner: Signal<T, S>) -> ReadOnlySignal<T, S>
fn from(inner: Signal<T, S>) -> ReadOnlySignal<T, S>
§impl<T> IntoAttributeValue for Signal<T>where
T: Clone + IntoAttributeValue,
impl<T> IntoAttributeValue for Signal<T>where T: Clone + IntoAttributeValue,
§fn into_value(self) -> AttributeValue
fn into_value(self) -> AttributeValue
§impl<T, S> Mul<T> for Signal<T, S>where
T: Mul<Output = T> + Copy + 'static,
S: Storage<SignalData<T>>,
impl<T, S> Mul<T> for Signal<T, S>where T: Mul<Output = T> + Copy + 'static, S: Storage<SignalData<T>>,
§impl<T, S> MulAssign<T> for Signal<T, S>where
T: Mul<Output = T> + Copy + 'static,
S: Storage<SignalData<T>>,
impl<T, S> MulAssign<T> for Signal<T, S>where T: Mul<Output = T> + Copy + 'static, S: Storage<SignalData<T>>,
§fn mul_assign(&mut self, rhs: T)
fn mul_assign(&mut self, rhs: T)
*=
operation. Read more§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>>,
§impl<T, S> Readable<T> for Signal<T, S>where
S: Storage<SignalData<T>>,
impl<T, S> Readable<T> for Signal<T, S>where S: Storage<SignalData<T>>,
§fn read(&self) -> <S as AnyStorage>::Ref<T>
fn read(&self) -> <S as AnyStorage>::Ref<T>
Get the current value of the signal. This will subscribe the current scope to the signal. If you would like to read the signal without subscribing to it, you can use Self::peek
instead.
If the signal has been dropped, this will panic.
§fn peek(&self) -> <S as AnyStorage>::Ref<T>
fn peek(&self) -> <S as AnyStorage>::Ref<T>
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.
§fn map_ref<I, U, F>(
ref_: <Signal<T, S> as Readable<T>>::Ref<I>,
f: F
) -> <Signal<T, S> as Readable<T>>::Ref<U>where
F: FnOnce(&I) -> &U,
U: ?Sized,
fn map_ref<I, U, F>( ref_: <Signal<T, S> as Readable<T>>::Ref<I>, f: F ) -> <Signal<T, S> as Readable<T>>::Ref<U>where F: FnOnce(&I) -> &U, U: ?Sized,
§fn try_map_ref<I, U, F>(
ref_: <Signal<T, S> as Readable<T>>::Ref<I>,
f: F
) -> Option<<Signal<T, S> as Readable<T>>::Ref<U>>where
F: FnOnce(&I) -> Option<&U>,
U: ?Sized,
fn try_map_ref<I, U, F>( ref_: <Signal<T, S> as Readable<T>>::Ref<I>, f: F ) -> Option<<Signal<T, S> as Readable<T>>::Ref<U>>where F: FnOnce(&I) -> Option<&U>, U: ?Sized,
§fn with<O>(&self, f: impl FnOnce(&T) -> O) -> O
fn with<O>(&self, f: impl FnOnce(&T) -> O) -> O
§impl<T, S> Sub<T> for Signal<T, S>where
T: Sub<Output = T> + Copy + 'static,
S: Storage<SignalData<T>>,
impl<T, S> Sub<T> for Signal<T, S>where T: Sub<Output = T> + Copy + 'static, S: Storage<SignalData<T>>,
§impl<T, S> SubAssign<T> for Signal<T, S>where
T: Sub<Output = T> + Copy + 'static,
S: Storage<SignalData<T>>,
impl<T, S> SubAssign<T> for Signal<T, S>where T: Sub<Output = T> + Copy + 'static, S: Storage<SignalData<T>>,
§fn sub_assign(&mut self, rhs: T)
fn sub_assign(&mut self, rhs: T)
-=
operation. Read more§impl<T, S> Writable<T> for Signal<T, S>where
T: 'static,
S: Storage<SignalData<T>>,
impl<T, S> Writable<T> for Signal<T, S>where T: 'static, S: Storage<SignalData<T>>,
§fn map_mut<I, U, F>(
ref_: <Signal<T, S> as Writable<T>>::Mut<I>,
f: F
) -> <Signal<T, S> as Writable<T>>::Mut<U>where
U: 'static + ?Sized,
F: FnOnce(&mut I) -> &mut U,
fn map_mut<I, U, F>( ref_: <Signal<T, S> as Writable<T>>::Mut<I>, f: F ) -> <Signal<T, S> as Writable<T>>::Mut<U>where U: 'static + ?Sized, F: FnOnce(&mut I) -> &mut U,
§fn try_map_mut<I, U, F>(
ref_: <Signal<T, S> as Writable<T>>::Mut<I>,
f: F
) -> Option<<Signal<T, S> as Writable<T>>::Mut<U>>where
I: 'static,
U: 'static + ?Sized,
F: FnOnce(&mut I) -> Option<&mut U>,
fn try_map_mut<I, U, F>( ref_: <Signal<T, S> as Writable<T>>::Mut<I>, f: F ) -> Option<<Signal<T, S> as Writable<T>>::Mut<U>>where I: 'static, U: 'static + ?Sized, F: FnOnce(&mut I) -> Option<&mut U>,
§fn try_write(
&self
) -> Result<<Signal<T, S> as Writable<T>>::Mut<T>, BorrowMutError>
fn try_write( &self ) -> Result<<Signal<T, S> as Writable<T>>::Mut<T>, BorrowMutError>
§fn write(&self) -> Self::Mut<T>
fn write(&self) -> Self::Mut<T>
§fn with_mut<O>(&self, f: impl FnOnce(&mut T) -> O) -> O
fn with_mut<O>(&self, f: impl FnOnce(&mut T) -> O) -> O
§fn set(&mut self, value: T)
fn set(&mut self, value: T)
impl<T, S> Copy for Signal<T, S>where T: 'static, S: Storage<SignalData<T>>,
Auto Trait Implementations§
impl<T, S = UnsyncStorage> !RefUnwindSafe for Signal<T, S>
impl<T, S> Send for Signal<T, S>where S: Sync, T: Send,
impl<T, S> Sync for Signal<T, S>where S: Sync, T: Sync,
impl<T, S> Unpin for Signal<T, S>where T: Unpin,
impl<T, S = UnsyncStorage> !UnwindSafe for Signal<T, S>
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
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> NoneValue for Twhere
T: Default,
impl<T> NoneValue for Twhere T: Default,
type NoneType = T
§fn null_value() -> T
fn null_value() -> T
§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<R, P> ReadPrimitive<R> for Pwhere
R: Read + ReadEndian<P>,
P: Default,
impl<R, P> ReadPrimitive<R> for Pwhere R: Read + ReadEndian<P>, P: Default,
source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
ReadEndian::read_from_little_endian()
.