Skip to content

React19 全解

React 19 之后,我们可能不再那么需要 useEffect 了。

useEffect 是一个功能强大的 hook,但他又是最难驾驭的一个 hook,理解不够的开发者可能会由于滥用它而导致项目失控。

包括被讨论最多的闭包问题,也往往跟它有关。

其中最考验开发者水平的,是对于 useEffect 依赖项的正确处理。

React19 的 大部分更新,几乎都是围绕如何在开发中尽量不用或者少用 useEffect 来展开。

在之前的项目开发中,useEffect 是我们处理异步问题必须使用的重要 hook 之一,他几乎存在于每一个页面组件之中。

React 19 则引入了新的 hook,让我们处理异步开发时,不再需要 useEffect,从而极大的改变我们的开发方式。

React19 想要彻底改变我们在项目开发中的 UI 交互方式。

因此对于 React19 而言,Suspense、Action 的重要性将会变得越来越高。

Suspense 虽然早在 React18 中都能够被正常使用,但是由于异步请求方案的不成熟,它们并没有被普及开,包括 React 官方文档也并没有进一步说明如何触发 Suspense 的回调机制。

因此它们只是小范围的被一些顶尖的前端开发所使用。

text
<Suspense fallback={<div>loading...</div>}>
  <List api={__api} />
</Suspense>
tsx
import { Suspense, useState, useTransition } from 'react';
import Message from './Message';
import Button from './Button';
import Skeleton from './Skeleton';
import { getApi } from './api';

export default function App() {
  const [response, setApi] = useState(getApi);
  const [isPending, startTransition] = useTransition();

  function __clickToGetMessage() {
    startTransition(() => {
      setApi(getApi());
    });
  }

  return (
    <div>
      <Button onClick={__clickToGetMessage} disabled={isPending}>
        点击更新
      </Button>

      <Suspense fallback={<Skeleton />}>
        <Message response={response} isPending={isPending} />
      </Suspense>
    </div>
  );
}
tsx
import { use } from 'react';

function Message(props) {
  const { isPending, response } = props;
  const content = use(response);
  return (
    <div
      className="text-sm leading-6 transition border border-blue-100 shadow rounded-md p-4 w-full mt-4"
      style={{ opacity: isPending ? 0.5 : 1 }}
    >
      {content.value}
    </div>
  );
}
export default Message;

使用 useTransition isPending 保证在点击按钮时,执行异步操作,完成后按钮恢复可用。 将 isPending 传递给子组件,来设置样式

新的架构思维

React 19 之前,React 高手与普通开发者之间,开发的项目无论是从性能上、还是从代码优雅上差距都非常大。

因此不同的人对于 React 的感受完全不一样。

React 19 则借由推出一些新的 hook,暗中传递一种框架思维**「最佳实践」**,这将会极大的拉进普通开发者与顶尖高手之间的差距。

对于大多数 React 开发者而言,这会是一个极大的提升。

这一最佳实践主要围绕如何改进异步编程的开发体验而展开

::: waring

注意:一套成熟架构思维,不是使用一个简单的方案解决某一个问题,而是要基于这套思维去解决项目中的绝大多数场景。

因此我们一定要结合大量的场景去理解一套项目架构思维。

:::

初级版:优化异步开发体验

React 19 引入了好几个新的 hook 用于优化异步开发体验。

text
use
useActionState
useFormStatus
useOptimistic

他们的主要目的是试图在项目开发中,引导开发者削弱 useEffect 的使用。

因此我们在实践中,需要谨记这个核心思想,不至于在开发中偏离轨迹,而忽视了新 hook 的强大能力。

进阶版:强化并发模式

只有少部分顶级前端开发需要关注并发模式。 他的理解难度并不低。

充分消化并发模式并运用于实践能够让一个前端程序员完成蜕变,你可以很容易突破前端开发的瓶颈。

在 React 中,并发模式并非是一个新概念。在 React Fiber 架构提出之初,我们就陆陆续续的听说了它。

但是经过好几个大版本的迭代,并发模式在开发者中的感受并不深刻。

甚至由于之前设计的几个并发模式的 API 不好用,导致很多开发者也对 React 的并发模式并不感兴趣。

React 19 简化和改进了并发模式,让并发模式更加易于使用。

例如,React 19 重新设计并改进了 Suspense,它支持更好的代码逻辑拆分,我们就可以在普通的页面开发中轻松的使用它。

顶级版:深入理解 React Compiler

毫无疑问,React Compiler 的使用一定是简单的,但是对于其原理的透彻理解,就需要一点底子了。

很显然,这必定会称为面试中的常客。因此,如果你希望在面试中有一个更好的表现,对其实现原理如数家珍会为你上大分。

透彻理解 React Compiler 的原理,需要对现有 React 的底层原理有一个大概的了解,这样我们才能形成一个完整的知识体系闭环。

学习之前,做好这个心理准备和知识铺垫即可。

Contributors

作者:Long Mo
字数统计:1.3k 字
阅读时长:4 分钟
Long Mo
文章作者:Long Mo
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Longmo Docs