前端随笔(六)——React 18为我们带来了什么?

React18发布RC版本,引入ReactDOM.createRoot API,实现自动批处理方法,优化非紧急状态更新。新APIReactRoot替代ReactDOM.render,批处理性能提升,状态更新在异步回调中也能合并处理。startTransition允许标记非紧急更新,避免卡顿,提高用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.React18 (???什么,你连React18都不知道)

2.React18带来了什么?

【1】新的 ReactDOM.createRoot() API;

【2】自动批处理方法;

【3】非紧急状态更新


1.React18 (???什么,你连React18都不知道)

距离2021年6月份React官方发布了React18的Alpha版本已经过去了大半年了。相信小伙伴们应该对18版本已经有初步的了解和感悟了吧!这不,2022年3月份,React再次发布React18的RC版本。

(Alpha版本的安装)

npm install react@alpha react-dom@alpha
# or
yarn add react@alpha react-dom@alpha

这次发布的 RC 版本(Release Candidate候选版本),基本和最终发布的 stable 版本一样,功能上不会再有太大变化,也更加稳定,大家可以尝试在生产环境里用起来了 ~

那么?我们要如何使用它呢?(输入以下指令安装React18RC版本即可进行使用)

npm install react@rc react-dom@rc

2.React18带来了什么?

据悉,React18会弃用一部分前序版本中的方法,例如使用ReactDOM.render就会在控制台出现warning告诉我们该方法即将被弃用,应该使用18版本提供的新方法;那这次新版本发布具体涉及到了哪些变化呢?

【1】新的 ReactDOM.createRoot() API;

在新版本中,React为我们提供了ReactRoot方法来替换以前使用的ReactDOM.render将组建导入到待渲染的DOM容器中。

具体使用方法如下:

import {createRoot} from 'react-dom/client'

const 变量a =document.gaeElementById('DOM容器');
const 方法b =createRoot(a);

b.render(
    <组件名 />
)

【2】自动批处理方法;

批处理是 React 将多个状态更新分组到一个重新渲染中以获得更好的性能。如果没有自动批处理,我们只能在 React 事件绑定后进行批处理更新。

默认情况下,Promise、setTimeout、native event handlers 或任何其他事件内部的更新不会在 React 中批处理。使用自动批处理,这些更新将自动批处理:

自动批处理的本质就是状态更新不再依赖于事件进行而是自动触发更新的。

在React18以前,异步回调函数以外所有对页面的渲染会合并为一次进行,但回调内的渲染无法合并,仍是分开进行多次渲染;在18版本中,无论是Promise还是setTimeout异步回调的更新状态都会被自动默认合并从而触发批处理;

我们也可以使用ReactDOM.flushSync();来退出批处理。

【3】非紧急状态更新

非紧急状态更新通常用于解决当前执行的操作涉及的原始数据量过大引起的由于数据更新加载导致的卡顿现象。

该方法可以将待处理数据标记为transitions状态,从而调用startTransition方法。startTransition 是 React 18 新增加的一个 API,它可以让你区分非紧急的状态更新。所有在 startTransition 回调中的更新都会被认为是非紧急处理,如果出现更紧急的更新(比如用户又输入了新的值/新数据更新),则上面的更新都会被中断,直到没有其他紧急操作之后才会去继续执行更新。

本质:在当前更新操作进行时,如果有更加紧急或重要的状态更新时就会阻断当前操作,直到处理完紧急更新才会继续当前操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值