react v18新特性 分享

Concurrency React

博客部分翻译

并发本身不是一个特性。这是一种新的幕后机制,使 React 能够同时准备多个版本的 UI。您可以将并发视为一个实现细节——它之所以有价值,是因为它解锁了一些功能。 React 在其内部实现中使用了复杂的技术,例如优先级队列和多重缓冲。但是您不会在我们的公共 API 中的任何地方看到这些概念。

当我们设计 API 时,我们试图向开发人员隐藏实现细节。作为一名 React 开发人员,您专注于您希望用户体验的样子,而 React 负责处理如何提供这种体验。所以我们不期望 React 开发人员知道并发是如何工作的。

然而,Concurrent React 比典型的实现细节更重要——它是对 React 核心渲染模型的基础更新。因此,虽然了解并发的工作原理并不是非常重要,但可能值得在高层次上了解它是什么。

Concurrent React 的一个关键属性是渲染是可中断的。当你第一次升级到 React 18 时,在添加任何并发特性之前,更新的渲染方式与之前版本的 React 相同——在一个单一的、不间断的、同步的事务中。使用同步渲染,一旦更新开始渲染,在用户可以在屏幕上看到结果之前,没有任何东西可以中断它。

在并发渲染中,情况并非总是如此。 React 可能会开始渲染更新,在中间暂停,然后再继续。它甚至可能完全放弃正在进行的渲染。 React 保证即使渲染被中断,UI 也会保持一致。为此,它会等待执行 DOM 突变,直到完成整个树的评估。有了这个能力,React 可以在后台准备新的屏幕而不阻塞主线程。这意味着 UI 可以立即响应用户输入,即使它处于大型渲染任务的中间,从而创造流畅的用户体验。

另一个例子是可重用状态。 Concurrent React 可以从屏幕上删除部分 UI,然后在重用之前的状态时将它们添加回来。例如,当用户从一个屏幕上移开并返回时,React 应该能够将前一个屏幕恢复到与之前相同的状态。在即将到来的次要版本中,我们计划添加一个名为 Offscreen 的新组件来实现此模式。同样,您将能够使用 Offscreen 在后台准备新的 UI,以便在用户显示之前准备好。

并发渲染是 React 中一个强大的新工具,我们的大多数新功能都是为了利用它而构建的,包括 Suspense、过渡和流式服务器渲染。但是 React 18 只是我们在这个新基础上构建目标的开始。

什么是Concurrent 模式

Concurrent 模式是一组 React 的新功能,可帮助应用保持响应,并根据用户的设备性能和网速进行适当的调整。

为了让应用保持响应,我们需要先了解是什么在制约应用保持响应?

我们日常使用App,浏览网页时,有两类场景会制约保持响应:

  • 当遇到大计算量的操作或者设备性能不足使页面掉帧,导致卡顿。
  • 发送网络请求后,由于需要等待数据返回才能进一步操作导致不能快速响应。

这两类场景可以概括为:

  • CPU的瓶颈
  • IO的瓶颈

CPU的瓶颈

当项目变得庞大、组件数量繁多时,就容易遇到CPU的瓶颈。看看一下DEMO

import React, {
    useState } from "react";
import "./styles.css";

export default function App() {
   
  const [content, setContent] = useState("");
  const [value, setInputValue] = useState("");

  return (
    <div>
      <div>
        <input
          value={
   value}
          onChange={
   (e) => {
   
            setInputValue(e.target.value);
            setContent(e.target.value);
          }}
        />
      </div>
      {
   Array.from(new Array(30000
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: React v18 中的 `componentWillMount` 生命周期已经被废弃,官方推荐使用 `componentDidMount` 代替。在 `componentDidMount` 中执行的代码可以保证在组件挂载完成后立即执行,而 `componentWillMount` 中的代码则可能会在组件挂载前执行,因此使用 `componentDidMount` 更为安全可靠。 ### 回答2: 在React v18中,componentWillMount生命周期方法已被新的生命周期方法代替。在旧版本的React中,componentWillMount方法会在组件渲染前被调用,以便进行一些准备工作,例如初始化状态或进行网络请求等。然而,新的React版本已经引入了类似的生命周期方法来取代componentWillMount。 在React v18中,代替componentWillMount方法的是新的生命周期方法`UNSAFE_componentWillMount`。这个新的方法与旧的方法类似,会在组件渲染前被调用。然而,React团队已经标记这个新的方法为不安全(UNSAFE),意味着它在未来的版本中可能会被移除。因此,建议在新的开发中不要使用`UNSAFE_componentWillMount`方法。 相反,React v18中推荐使用的是`componentDidMount`方法来替代`componentWillMount`。`componentDidMount`方法会在组件渲染之后被调用,因此可以在这个方法中进行需要在组件渲染完毕后执行的操作,例如网络请求、订阅事件等。 总结来说,React v18推荐使用`componentDidMount`方法来代替`componentWillMount`方法,而`UNSAFE_componentWillMount`方法可以在旧的React代码中使用,但不建议在新的开发中使用。 ### 回答3: 在 React v18 中,componentWillMount 生命周期方法被新的生命周期方法取代了。新的生命周期方法是UNSAFE_componentWillMount。由于 React v17 开始将生命周期方法标记为 UNSAFE,以告知开发者在将来的版本中可能会被移除或更改,所以在 React v18 中继续使用 UNSAFE_componentWillMount。 componentWillMount 生命周期函数在组件渲染前调用,它是在 render 方法执行前最后一个被调用的方法。它通常被用于在组件被挂载到 DOM 前设置组件的一些初始状态或进行一些准备工作。 然而,由于 componentWillMount 方法存在一些限制和问题,React 团队决定废弃它并提供替代方案。主要原因是 componentWillMount 在服务器端渲染时会被调用两次,而且容易导致一些不一致的问题。 为了兼容之前的代码,React v18 引入了 UNSAFE_componentWillMount 方法。开发者可以继续在旧的生命周期方法中编写代码,但应该尽早迁移到推荐的更安全的生命周期方法。 替代 componentWillMount 方法的推荐方法是使用 constructor 中设置初始状态或在 componentDidMount 中进行初始设置。constructor 是在组件实例化时第一个被调用的方法,适合用于设置初始状态。而 componentDidMount 在组件挂载到 DOM 后被调用,适合用于进行一些准备工作。 总之,React v18 中 componentWillMount 生命周期方法被 UNSAFE_componentWillMount 方法代替。开发者应尽早迁移到推荐的更安全的生命周期方法,如 constructor 或 componentDidMount。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值