React中setSeconds两种写法的差异及第一种写法原理解析
React计时器中两种
setSeconds写法的区别及第一行执行逻辑 核心区别
setSeconds((seconds) => seconds + 1):采用函数式更新,基于React内部维护的最新state值计算新状态setSeconds(seconds + 1):采用值更新,依赖当前作用域中seconds变量的快照值
第一行代码执行逻辑
调用带函数参数的setSeconds时,流程是这样的:
- React自动将组件当前最新的
secondsstate值作为参数传入箭头函数 - 箭头函数接收这个最新值,执行
seconds + 1计算出新的状态数值 - React获取到新值后,更新组件的
secondsstate,并触发组件重新渲染
函数式更新的适用场景
像计时器这种需要频繁、连续更新状态的场景,或者短时间内多次触发状态更新时,当前作用域中的seconds可能因闭包特性保留旧值,用值更新会导致计算偏差。而函数式更新每次都取React内部维护的最新state,能保证计算结果准确。
内容的提问来源于stack exchange,提问作者Zain Ul Abideen
相关产品推荐
相关产品推荐

