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>
pub const fn global_memo(constructor: fn() -> T) -> GlobalMemo<T>
Creates a new global Signal that can be used in a global static.
pub 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.
pub 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.
§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_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.
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 take(&self) -> T
pub fn take(&self) -> T
Take the value out of the signal, invalidating the signal in the process.
pub fn origin_scope(&self) -> ScopeId
pub fn origin_scope(&self) -> ScopeId
Get the scope the signal was created in.
pub fn id(&self) -> GenerationalBoxId
pub fn id(&self) -> GenerationalBoxId
Get the generational id of the signal.
Trait Implementations§
§impl<T, S> AddAssign<T> for Signal<T, S>
impl<T, S> AddAssign<T> for Signal<T, S>
§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>
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
§impl<T, S> DivAssign<T> for Signal<T, S>
impl<T, S> DivAssign<T> for Signal<T, S>
§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> MulAssign<T> for Signal<T, S>
impl<T, S> MulAssign<T> for Signal<T, S>
§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 for Signal<T, S>where
S: Storage<SignalData<T>>,
impl<T, S> Readable for Signal<T, S>where
S: Storage<SignalData<T>>,
§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.
§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>
§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>
§fn read(&self) -> <Self::Storage as AnyStorage>::Ref<Self::Target>
fn read(&self) -> <Self::Storage as AnyStorage>::Ref<Self::Target>
§fn with<O>(&self, f: impl FnOnce(&Self::Target) -> O) -> O
fn with<O>(&self, f: impl FnOnce(&Self::Target) -> O) -> O
§impl<T, S> SubAssign<T> for Signal<T, S>
impl<T, S> SubAssign<T> for Signal<T, S>
§fn sub_assign(&mut self, rhs: T)
fn sub_assign(&mut self, rhs: T)
-=
operation. Read more§impl<T, S> Writable for Signal<T, S>where
T: 'static,
S: Storage<SignalData<T>>,
impl<T, S> Writable for Signal<T, S>where
T: 'static,
S: Storage<SignalData<T>>,
§fn map_mut<I, U, F>(
ref_: <Signal<T, S> as Writable>::Mut<I>,
f: F
) -> <Signal<T, S> as Writable>::Mut<U>
fn map_mut<I, U, F>( ref_: <Signal<T, S> as Writable>::Mut<I>, f: F ) -> <Signal<T, S> as Writable>::Mut<U>
§fn try_map_mut<I, U, F>(
ref_: <Signal<T, S> as Writable>::Mut<I>,
f: F
) -> Option<<Signal<T, S> as Writable>::Mut<U>>
fn try_map_mut<I, U, F>( ref_: <Signal<T, S> as Writable>::Mut<I>, f: F ) -> Option<<Signal<T, S> as Writable>::Mut<U>>
§fn try_write(
&self
) -> Result<<Signal<T, S> as Writable>::Mut<T>, BorrowMutError>
fn try_write( &self ) -> Result<<Signal<T, S> as Writable>::Mut<T>, BorrowMutError>
§fn write(&mut self) -> Self::Mut<Self::Target>
fn write(&mut self) -> Self::Mut<Self::Target>
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>
impl<T, S> Sync for Signal<T, S>
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> DowncastSync for T
impl<T> DowncastSync for T
§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 P
impl<R, P> ReadPrimitive<R> for P
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()
.