React18 setState异步更新

React18引入了自动批处理机制,优化了异步回调中的更新,减少了渲染次数。本文通过实例分析了setState的批处理更新,解释了在不同场景下如何依赖上一次的状态值进行异步更新,以及useState的闭包特性。
摘要由CSDN通过智能技术生成

        在v18之前,只有事件回调、生命周期回调中的更新会批处理,比如onClick。而在promise、setTimeout等异步回调中不会批处理,这就会导致多次render。React18实现了自动批处理,减少了更新次数,提升性能。

        接下来,简单分析下setState例子,加深对批处理更新的理解。

const [myState,setMyState] = useState(1);
const [flag, setFlag] =useState(true);

console.log('render');

const handleClick = ()=>{
        setMyState((myState) =>myState+6);
        console.log('myState1',myState);
        setMyState(myState+1); 
        setMyState((myState) =>myState+6);
        console.log('myState2',myState);
        setFlag((flag)=>!flag);
        setTimeout(()=>{
            setMyState(myState+1);
            console.log('myState3',myState);
            setMyState((myState) =>myState+10);
            console.log('myState4',myState);
        },1000)
}

return (
     <p>
         <
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值