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! {}
# }