pub struct UseState<T>where
T: 'static,{ /* private fields */ }
Implementations§
§impl<T> UseState<T>where
T: 'static,
impl<T> UseState<T>where T: 'static,
pub fn set(&self, new: T)
pub fn set(&self, new: T)
Set the state to a new value.
pub 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();
}
})
}
pub fn setter(&self) -> Rc<dyn Fn(T) + 'static>
pub fn setter(&self) -> Rc<dyn Fn(T) + 'static>
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
on the state is the
preferred way to get “another” state 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()
}
}
}
pub 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);
}
});
}
pub 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>
pub fn needs_update(&self)
pub fn needs_update(&self)
§impl<T> UseState<T>where
T: Clone,
impl<T> UseState<T>where T: Clone,
pub 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);
pub 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§
§impl<T> AddAssign<T> for &UseState<T>where
T: Add<T, Output = T> + Copy,
impl<T> AddAssign<T> for &UseState<T>where T: Add<T, Output = T> + Copy,
§fn add_assign(&mut self, rhs: T)
fn add_assign(&mut self, rhs: T)
+=
operation. Read more§impl<T> AddAssign<T> for UseState<T>where
T: Add<T, Output = T> + Copy,
impl<T> AddAssign<T> for UseState<T>where T: Add<T, Output = T> + Copy,
§fn add_assign(&mut self, rhs: T)
fn add_assign(&mut self, rhs: T)
+=
operation. Read more§impl<T> DivAssign<T> for &UseState<T>where
T: Div<T, Output = T> + Copy,
impl<T> DivAssign<T> for &UseState<T>where T: Div<T, Output = T> + Copy,
§fn div_assign(&mut self, rhs: T)
fn div_assign(&mut self, rhs: T)
/=
operation. Read more§impl<T> DivAssign<T> for UseState<T>where
T: Div<T, Output = T> + Copy,
impl<T> DivAssign<T> for UseState<T>where T: Div<T, Output = T> + Copy,
§fn div_assign(&mut self, rhs: T)
fn div_assign(&mut self, rhs: T)
/=
operation. Read more§impl<T> MulAssign<T> for &UseState<T>where
T: Mul<T, Output = T> + Copy,
impl<T> MulAssign<T> for &UseState<T>where T: Mul<T, Output = T> + Copy,
§fn mul_assign(&mut self, rhs: T)
fn mul_assign(&mut self, rhs: T)
*=
operation. Read more§impl<T> MulAssign<T> for UseState<T>where
T: Mul<T, Output = T> + Copy,
impl<T> MulAssign<T> for UseState<T>where T: Mul<T, Output = T> + Copy,
§fn mul_assign(&mut self, rhs: T)
fn mul_assign(&mut self, rhs: T)
*=
operation. Read more