这只是语法上的区别 `useState()`
Is this only a syntax difference `useState()`
const [val,setVal] = React.useState(0);
有时我会在其他人的代码中看到这个
setVal(()=>val);
跟这个有区别吗
setVal(val);
正如评论所指出的,这种语法有一半的时间没有区别。它发挥作用的地方是异步性。例如,假设您在 useEffect
中有一个 setTimeout
调用,它等待几秒钟然后执行状态更新,但在等待期间,状态从组件中的其他地方更新。如果您要在 setTimeout
回调中引用状态值,它将是一个陈旧值,因此如果您调用 setMyState(prevState + 1)
,您将关闭 1。但是,如果您使用 setMyState(prevState => prevState + 1)
,您有访问了最新的状态值。
此外,当您不想在像 useEffect
这样的钩子中引用状态值时,它非常有用。依赖数组中包含的任何内容都会导致挂钩更新,并且会产生连锁反应或触发 useEffect
。在钩子内部使用 setMyState(prev => prev + 1)
时,可以避免引用状态值本身。
const [val,setVal] = React.useState(0);
有时我会在其他人的代码中看到这个
setVal(()=>val);
跟这个有区别吗
setVal(val);
正如评论所指出的,这种语法有一半的时间没有区别。它发挥作用的地方是异步性。例如,假设您在 useEffect
中有一个 setTimeout
调用,它等待几秒钟然后执行状态更新,但在等待期间,状态从组件中的其他地方更新。如果您要在 setTimeout
回调中引用状态值,它将是一个陈旧值,因此如果您调用 setMyState(prevState + 1)
,您将关闭 1。但是,如果您使用 setMyState(prevState => prevState + 1)
,您有访问了最新的状态值。
此外,当您不想在像 useEffect
这样的钩子中引用状态值时,它非常有用。依赖数组中包含的任何内容都会导致挂钩更新,并且会产生连锁反应或触发 useEffect
。在钩子内部使用 setMyState(prev => prev + 1)
时,可以避免引用状态值本身。