React:传入set函数中的函数参数会立刻执行吗?
下面这段代码中console.log
会打印[1, 2, 3, 4, 5, 3]
,也就说它打印的修改后的值。
但是在我理解中传入的这个函数参数应该不是立刻执行的吧。
- 这里的
console.log
会不会异步打印呢? - 如果是的话,哪些情况下会异步打印,有没有官方说明?
function App() {
const [nums, setNums] = useState({
nums: [1, 2, 3, 4, 5],
});
function handleClick() {
setNums((pre) => {
pre.nums.push(3);
return pre;
});
console.log('after setNums:', nums);
}
return <button onClick={handleClick}>1</button>;
}
因为setNums状态更新是异步的,处理完打印出来是更新前的值,想看到更新后的用useEffect监听这个值的变化就行。