Struct dioxus_hooks::UseState
source · [−]pub struct UseState<T: 'static> { /* private fields */ }Implementations
sourceimpl<T: 'static> UseState<T>
impl<T: 'static> UseState<T>
sourcepub fn current(&self) -> Rc<T>
pub fn current(&self) -> Rc<T>
Get the current value of the state by cloning its container Rc.
This is useful when you are dealing with state in async contexts but need to know the current value. You are not given a reference to the state.
Examples
An async context might need to know the current value:
fn component(cx: Scope) -> Element {
let count = use_state(&cx, || 0);
cx.spawn({
let set_count = count.to_owned();
async move {
let current = set_count.current();
}
})
}sourcepub fn setter(&self) -> Rc<dyn Fn(T)>
pub fn setter(&self) -> Rc<dyn Fn(T)>
Get the setter function directly without the UseState wrapper.
This is useful for passing the setter function to other components.
However, for most cases, calling to_owned oUseStatete is the
preferred way to get “anothset_statetate handle.
Examples
A component might require an Rc<dyn Fn(T)> as an input to set a value.
fn component(cx: Scope) -> Element {
let value = use_state(&cx, || 0);
rsx!{
Component {
handler: value.setter()
}
}
}sourcepub fn modify(&self, f: impl FnOnce(&T) -> T)
pub fn modify(&self, f: impl FnOnce(&T) -> T)
Set the state to a new value, using the current state value as a reference.
This is similar to passing a closure to React’s set_value function.
Examples
Basic usage:
fn component(cx: Scope) -> Element {
let value = use_state(&cx, || 0);
// to increment the value
value.modify(|v| v + 1);
// usage in async
cx.spawn({
let value = value.to_owned();
async move {
value.modify(|v| v + 1);
}
});
}sourcepub fn get(&self) -> &T
pub fn get(&self) -> &T
Get the value of the state when this handle was created.
This method is useful when you want an Rc around the data to cheaply
pass it around your app.
Warning
This will return a stale value if used within async contexts.
Try current to get the real current value of the state.
Example
fn component(cx: Scope) -> Element {
let value = use_state(&cx, || 0);
let as_rc = value.get();
assert_eq!(as_rc.as_ref(), &0);
}pub fn get_rc(&self) -> &Rc<T>
sourcepub fn needs_update(&self)
pub fn needs_update(&self)
Mark the component that create this UseState as dirty, forcing it to re-render.
fn component(cx: Scope) -> Element {
let count = use_state(&cx, || 0);
cx.spawn({
let count = count.to_owned();
async move {
// for the component to re-render
count.needs_update();
}
})
}sourceimpl<T: Clone> UseState<T>
impl<T: Clone> UseState<T>
sourcepub fn with_mut(&self, apply: impl FnOnce(&mut T))
pub fn with_mut(&self, apply: impl FnOnce(&mut T))
Get a mutable handle to the value by calling ToOwned::to_owned on the
current value.
This is essentially cloning the underlying value and then setting it, giving you a mutable handle in the process. This method is intended for types that are cheaply cloneable.
If you are comfortable dealing with RefMut, then you can use make_mut to get
the underlying slot. However, be careful with RefMut since you might panic
if the RefCell is left open.
Examples
let val = use_state(&cx, || 0);
val.with_mut(|v| *v = 1);sourcepub fn make_mut(&self) -> RefMut<'_, T>
pub fn make_mut(&self) -> RefMut<'_, T>
Get a mutable handle to the value by calling ToOwned::to_owned on the
current value.
This is essentially cloning the underlying value and then setting it, giving you a mutable handle in the process. This method is intended for types that are cheaply cloneable.
Warning
Be careful with RefMut since you might panic if the RefCell is left open!
Examples
let val = use_state(&cx, || 0);
*val.make_mut() += 1;Trait Implementations
sourceimpl<T: Add<Output = T> + Copy> AddAssign<T> for &UseState<T>
impl<T: Add<Output = T> + Copy> AddAssign<T> for &UseState<T>
sourcefn add_assign(&mut self, rhs: T)
fn add_assign(&mut self, rhs: T)
Performs the += operation. Read more
sourceimpl<T: Add<Output = T> + Copy> AddAssign<T> for UseState<T>
impl<T: Add<Output = T> + Copy> AddAssign<T> for UseState<T>
sourcefn add_assign(&mut self, rhs: T)
fn add_assign(&mut self, rhs: T)
Performs the += operation. Read more
sourceimpl<T: Div<Output = T> + Copy> DivAssign<T> for &UseState<T>
impl<T: Div<Output = T> + Copy> DivAssign<T> for &UseState<T>
sourcefn div_assign(&mut self, rhs: T)
fn div_assign(&mut self, rhs: T)
Performs the /= operation. Read more
sourceimpl<T: Div<Output = T> + Copy> DivAssign<T> for UseState<T>
impl<T: Div<Output = T> + Copy> DivAssign<T> for UseState<T>
sourcefn div_assign(&mut self, rhs: T)
fn div_assign(&mut self, rhs: T)
Performs the /= operation. Read more
sourceimpl<T: Mul<Output = T> + Copy> MulAssign<T> for &UseState<T>
impl<T: Mul<Output = T> + Copy> MulAssign<T> for &UseState<T>
sourcefn mul_assign(&mut self, rhs: T)
fn mul_assign(&mut self, rhs: T)
Performs the *= operation. Read more
sourceimpl<T: Mul<Output = T> + Copy> MulAssign<T> for UseState<T>
impl<T: Mul<Output = T> + Copy> MulAssign<T> for UseState<T>
sourcefn mul_assign(&mut self, rhs: T)
fn mul_assign(&mut self, rhs: T)
Performs the *= operation. Read more
Auto Trait Implementations
impl<T> !RefUnwindSafe for UseState<T>
impl<T> !Send for UseState<T>
impl<T> !Sync for UseState<T>
impl<T> Unpin for UseState<T>
impl<T> !UnwindSafe for UseState<T>
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into)Uses borrowed data to replace owned data, usually by cloning. Read more