React中useEffect依赖项被设为相同值时是否会触发执行?
React useEffect执行问题解答
答案:该useEffect不会被触发执行
原因说明
- React处理
useState的状态更新逻辑时,默认会对新老状态做浅比较:如果新传入的状态值和当前状态浅比较相等,会直接跳过本次状态更新,组件不会触发重渲染。 - 示例中的
number是基本数据类型,调用set_number(2 - 1)传入的新值为1,和当前number的状态值完全相等,因此React会判定为无状态变更,不执行重渲染。 useEffect仅会在依赖项发生变化、且对应渲染周期结束后才会触发回调,本次既没有状态变更也没有重渲染流程,自然不会执行useEffect内部逻辑。
补充注意
如果状态是引用类型(对象、数组等),哪怕内容完全一致,只要传入的是新的引用地址,浅比较会判定为不相等,就会触发重渲染和对应依赖的useEffect,示例如下:
const [user, setUser] = useState({name: '张三'}); useEffect(() => { console.log('user变化了') }, [user]) // 以下代码会触发useEffect,因为传入的是全新的对象引用 setUser({name: '张三'})
内容的提问来源于stack exchange,提问作者Bear Bile Farming is Torture
相关产品推荐
相关产品推荐

