This question already has answers here:
useState set method not reflecting change immediately
(6个答案)
2年前关闭。
过去,我们曾明确警告过,调用
使用useState,在显式更新状态后如何获取状态的值?
钩子(Hook)如何工作?据我所知,
不会导致回调运行。
在旧世界中,我的另一种解决方法是将实例变量
上面的
如果您对
(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会提供一些见解。