2 回答

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊
這只是 setState 的一個(gè)特性嗎?- 是的
useState
是一種使用與 this.state 在類中提供的功能完全相同的功能的新方法
這意味著它的核心仍然依賴于舊this.setState({})
功能。如果你記得使用this.setState()
,你就會(huì)知道它有一個(gè)可用的回調(diào)函數(shù),可以這樣使用:
this.setState((currentState)?=>?{?/*?do?something?with?current?state?*/?})
現(xiàn)在已經(jīng)轉(zhuǎn)移到useState
hook 的第二個(gè)解構(gòu)項(xiàng)[item, setItem]
?setItem,因此它具有相同的功能:
setItem((currentState) => { /* do something with current state */ }

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個(gè)贊
通過鉤子,React 包含每個(gè)狀態(tài)名稱到其當(dāng)前值的內(nèi)部映射。和
const [todos, setTodos] = useState<Todo[]>([])
每當(dāng)setTodos調(diào)用并todos再次設(shè)置狀態(tài)時(shí),React 都會(huì)將內(nèi)部狀態(tài)更新為todos新值。useState調(diào)用時(shí),它還將返回變量的當(dāng)前內(nèi)部狀態(tài)。
你可以這樣想:
// React internals
let internalState;
const setState = (param) => {
if (typeof param !== 'function') {
internalState = param;
} else {
param(internalState);
}
};
const useState = initialValue => {
internalState ??= initialValue;
return [internalState, setState];
}
然后,當(dāng)您調(diào)用狀態(tài)設(shè)置器時(shí),您可以向它傳遞一個(gè)普通值(更新internalState),或者您可以向它傳遞一個(gè)函數(shù),該函數(shù)在被調(diào)用時(shí)將當(dāng)前內(nèi)部狀態(tài)作為第一個(gè)參數(shù)傳遞。
請(qǐng)注意,該prevTodos參數(shù)將包含當(dāng)前狀態(tài),包括中間更新。例如,如果您setTodos在重新渲染發(fā)生之前同步調(diào)用兩次,則您需要第二次使用回調(diào)形式才能“看到”第一次調(diào)用setTodos.
添加回答
舉報(bào)