2 回答
TA贡献1830条经验 获得超9个赞
这只是 setState 的一个特性吗?- 是的
useState
是一种使用与 this.state 在类中提供的功能完全相同的功能的新方法
这意味着它的核心仍然依赖于旧this.setState({})
功能。如果你记得使用this.setState()
,你就会知道它有一个可用的回调函数,可以这样使用:
this.setState((currentState) => { /* do something with current state */ })
现在已经转移到useState
hook 的第二个解构项[item, setItem]
setItem,因此它具有相同的功能:
setItem((currentState) => { /* do something with current state */ }
TA贡献1876条经验 获得超7个赞
通过钩子,React 包含每个状态名称到其当前值的内部映射。和
const [todos, setTodos] = useState<Todo[]>([])
每当setTodos调用并todos再次设置状态时,React 都会将内部状态更新为todos新值。useState调用时,它还将返回变量的当前内部状态。
你可以这样想:
// React internals
let internalState;
const setState = (param) => {
if (typeof param !== 'function') {
internalState = param;
} else {
param(internalState);
}
};
const useState = initialValue => {
internalState ??= initialValue;
return [internalState, setState];
}
然后,当您调用状态设置器时,您可以向它传递一个普通值(更新internalState),或者您可以向它传递一个函数,该函数在被调用时将当前内部状态作为第一个参数传递。
请注意,该prevTodos参数将包含当前状态,包括中间更新。例如,如果您setTodos在重新渲染发生之前同步调用两次,则您需要第二次使用回调形式才能“看到”第一次调用setTodos.
添加回答
举报