This question already has answers here:
useState set method not reflecting change immediately

(6个答案)


2年前关闭。




过去,我们曾明确警告过,调用setState({myProperty})是异步的,并且this.state.myProperty的值在回调或下一个render()方法之前无效。

使用useState,在显式更新状态后如何获取状态的值?

钩子(Hook)如何工作?据我所知,useState的setter函数没有回调,例如
const [value, setValue] = useState(0);
setValue(42, () => console.log('hi callback');

不会导致回调运行。

在旧世界中,我的另一种解决方法是将实例变量(e.g. this.otherProperty = 42)卡在类上,但这在这里不起作用,因为没有可重用的函数实例(严格模式下没有this)。

最佳答案

更新后,您可以使用 useEffect 访问最新状态。如果您有多个状态挂钩,并且只想跟踪其中的一部分更新,则可以将状态作为useEffect函数的第二个参数传入数组:

useEffect(() => { console.log(state1, state2)}, [state1])

上面的useEffect仅在state1更新时才会调用,并且您不应该从此函数内部信任state2值,因为它可能不是最新的。

如果您对useState创建的更新功能是否同步感到好奇,即如果React在使用钩子(Hook)时批处理了状态更新,则this answer会提供一些见解。

09-25 17:37
查看更多