Skip to main content
Version: Next

状态

如何存储状态的一般视图

这个表格可以作为一个指南,帮助您决定哪种状态存储类型最适合您的用例:

Hook类型何时渲染?作用域
use_stateT被设置一个值组件内部实例
use_state_eqT: PartialEq被设置一个不同的值组件内部实例
use_reducerT: Reducible被调用归纳组件内部实例
use_reducer_eqT: Reducible + PartialEq被调用归纳,归纳后的值与之前不同组件内部实例
use_memoDeps -> T依赖项发生变化组件内部实例
use_callbackDeps -> Callback<E>依赖项发生变化组件内部实例
use_mut_refT-组件内部实例
全局静态常量T-全局,任何位置都可以使用

访问句柄内部

UseStateHandleUseReducerHandle 都提供了直接访问其内部组成部分的方法。

value_rc()

Rc<T> 的形式返回当前值。与对句柄解引用(返回绑定到句柄生命周期的 &T)不同, value_rc() 返回一个拥有所有权的 Rc<T>,可以移动到闭包中或独立存储���

# use std::rc::Rc;
# use yew::prelude::*;
# #[component]
# fn Comp() -> Html {
let counter = use_state(|| 0);
let rc_value: Rc<i32> = counter.value_rc();
# html! {}
# }

into_inner()

消耗句柄并返回其两个组成部分:当前值(Rc<T>)和 setter/dispatcher。 当你想要在不克隆整个句柄的情况下将读取与写入分离时,这非常有用。

对于 UseReducerHandle,返回类型为 (Rc<T>, UseReducerDispatcher<T>)

# use std::rc::Rc;
# use yew::prelude::*;
# #[derive(Default, PartialEq)]
# struct CounterState { counter: i32 }
# impl Reducible for CounterState {
# type Action = ();
# fn reduce(self: Rc<Self>, _: ()) -> Rc<Self> { self }
# }
# #[component]
# fn Comp() -> Html {
let state = use_reducer(CounterState::default);
let (value, dispatcher) = state.into_inner();
# html! {}
# }

对于 UseStateHandle,返回类型为 (Rc<T>, UseStateSetter<T>)���

# use std::rc::Rc;
# use yew::prelude::*;
# #[component]
# fn Comp() -> Html {
let state = use_state(|| 0);
let (value, setter) = state.into_inner();
# html! {}
# }