【React Hooks - useState状态批量更新原理】

概述

所谓批量处理就是当在同时更新多个状态下,能够统一批量处理更新,避免了重复渲染。在React17及之前版本,React只会在合成事件以及生命周期内部进行批量处理,在setTimeout、Promise、Fetch等异步请求中,则不会自动批量处理,需要使用unstable_batchedUpdatesAPI手动处理。而在React18对其进行了优化,不管什么条件下,默认都会批量处理。本文主要就是从demo实例结合bugger源码的方式来解释在React17和18中对于状态批量更新的逻辑介绍。

React17

从概述可知,React17版本,默认只会在合成事件、生命周期内批量处理,在异步请求中需要手动处理,先看下面demo代码:

import React, {
    Fragment, useState } from 'react';

export default function Component() {
   
  const [a, setA] = useState(1);
  console.log('a', a);

  // 异步请求,不会自动批量,会渲染多次,该示例中会render4次
  function handleClickWithPromise() {
   
    Promise.resolve().then(() => {
   
      setA((a) => a + 1);
      setA((a) => a + 1);
      setA((a) => a + 1);
      setA((a) <
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值