这只是语法上的区别 `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) 时,可以避免引用状态值本身。