React多次操作一个state会执行几次?
文章描述
React多次操作一个state会执行几次?面试常见问题
首先setstate是异步的,如果我们同时操作一个state,得到的结果会是什么呢?里面又是怎么执行的?挺常见的面试题了
留了个标记(update)说 state将要变化,比如变成某个值,或者通过某个函数变化。如果有多个setState调用,就会有多个标记串在一起
安排了从root开始的重新检查
当检查到你的component的时候,再根据留下的标记修改state,如果有多个update就依次执行,最后查看是否有变化,等所有的节点检查完过后,更新DOM。React 18中的concurrent mode过后有些特殊,update可以有不同的优先级。React检查的时候可能会选择性的跳过某些update,分成几次执行,情况更为复杂。回答你的问题:首先setState是异步,多个调用是否同时执行大部分情况是,但是不绝对
看下例子:
import React, { useEffect, useState } from 'react';
const Index:React.FC = () => {
const [count, setCount] = useState<number>(0);
const [clickCount, setClickCount] = useState<number>(0)
const clickCallback= function() {
setClickCount(clickCount + 1);
setCount(count+ 1);
setCount(count+ 1);
setCount(count+ 1);
setCount(count+ 1);
}
useEffect(() => {
console.log(count)
}, [count])
return <div>
<h2>{count}</h2>
<p>点击次数: {clickCount}</p>
<button onClick={clickCallback}>click</button>
</div>
}
export default Index;
总结:React同时操作一个state时,只会执行任务队列的最后一个