React正式发布v18.0.0

简介: 本文适合对React18感兴趣的小伙伴阅读。

一、前言


本文基于开源项目:

https://github.com/facebook/react


React18在几个小时前发布了release,我们一起来看看。

image.png

image.png

重大变化抢先看:自动批处理、严格模式、一致的 useEffect 计时、更严格的水合错误、挂起树总是一致的、带有悬念的布局效果、新的 JS 环境要求。


二、新特性


React

  • useId是一个新的钩子,用于在客户端和服务器上生成唯一 ID,同时避免水合不匹配。它主要用于与需要唯一 ID 的可访问性 API 集成的组件库。这解决了 React 17 及更低版本中已经存在的问题,但在 React 18 中更为重要,因为新的流式服务器渲染器如何无序交付 HTML。
  • startTransitionuseTransition让您将一些状态更新标记为不紧急。默认情况下,其他状态更新被认为是紧急的。React 将允许紧急状态更新(例如,更新文本输入)以中断非紧急状态更新(例如,呈现搜索结果列表)。
  • useDeferredValue让您推迟重新渲染树的非紧急部分。它类似于去抖动,但与之相比有一些优点。没有固定的时间延迟,因此 React 将在第一次渲染反映在屏幕上后立即尝试延迟渲染。延迟渲染是可中断的,不会阻止用户输入。
  • useSyncExternalStore是一个新的钩子,它允许外部存储通过强制对存储的更新同步来支持并发读取。它消除了useEffect在实现对外部数据源的订阅时的需要,并且推荐用于任何与 React 外部状态集成的库。
  • useInsertionEffect是一个新的钩子,它允许CSS-in-JS 库解决在渲染中注入样式的性能问题。除非您已经构建了 CSS-in-JS 库,否则我们不希望您使用它。这个钩子将在 DOM 发生变异之后运行,但在布局效果读取新布局之前。这解决了在 React 17 及更低版本中已经存在的问题,但在 React 18 中更为重要,因为 React 在并发渲染期间屈服于浏览器,使其有机会重新计算布局。

React DOM Client

react-dom/client

  • createRootrender: 为or创建根的新方法unmount。使用它代替ReactDOM.render. 没有它,React 18 中的新功能就无法工作。
  • hydrateRoot: 水合服务器渲染应用程序的新方法。使用它而不是 ReactDOM.hydrate与新的 React DOM 服务器 API 结合使用。没有它,React 18 中的新功能就无法工作。


两者都createRoot接受hydrateRoot一个新选项onRecoverableError,以防你想在 React 从渲染期间的错误中恢复或日志记录时收到通知。默认情况下,React 将使用reportError, 或console.error在较旧的浏览器中。


React DOM Server

react-dom/server


完全支持流式传输 Suspense

  • renderToPipeableStream: 用于 Node 环境中的流式传输。
  • renderToReadableStream:适用于现代边缘运行时环境,例如 Deno 和 Cloudflare worker


现有renderToString方法继续有效,但不鼓励使用。


三、弃用了哪些呢


react-dom

  • react-dom:ReactDOM.render已弃用。使用它会警告并在 React 17 模式下运行您的应用程序。
  • react-dom:ReactDOM.hydrate已弃用。使用它会警告并在 React 17 模式下运行您的应用程序。
  • react-dom:ReactDOM.unmountComponentAtNode已弃用
  • react-dom:ReactDOM.renderSubtreeIntoContainer已弃用
  • react-dom/server:ReactDOMServer.renderToNodeStream已弃用

四、升级


安装最新版

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


首次安装的话,在控制台中看到一个警告:


React 18 不再支持 ReactDOM.render。请改用 createRoot。在您切换到新的 API 之前,您的应用程序会像运行 React 17 一样运行。


React 18 引入了一个新的根 API,它为管理根提供了更好的人体工程学。新的根 API 还启用了新的并发渲染器,它允许您选择使用并发功能。


createRoot

import { createRoot } from 'react-dom/client';
const container = document.getElementById('app');
const root = createRoot(container);
root.render(<App tab="home" />);


unmountComponentAtNode改为root.unmount

root.unmount();


渲染中删除了回调

function AppWithCallbackAfterRender() {
  useEffect(() => {
    console.log('rendered');
  });
return <App tab="home" />
}
const container = document.getElementById('app');
const root = ReactDOM.createRoot(container);
root.render(<AppWithCallbackAfterRender />);


服务器端渲染

import { hydrateRoot } from 'react-dom/client';
const container = document.getElementById('app');
const root = hydrateRoot(container, <App tab="home" />);
// 与 createRoot 不同,您不需要在此处单独调用 root.render()


五、最后


   在我们阅读完官方文档后,我们一定会进行更深层次的学习,比如看下框架底层是如何运行的,以及源码的阅读。  


这里广东靓仔给下一些小建议:

  • 在看源码前,我们先去官方文档复习下框架设计理念、源码分层设计
  • 阅读下框架官方开发人员写的相关文章
  • 借助框架的调用栈来进行源码的阅读,通过这个执行流程,我们就完整的对源码进行了一个初步的了解
  • 接下来再对源码执行过程中涉及的所有函数逻辑梳理一遍
相关文章
|
11月前
|
数据采集 Java 测试技术
精准测试如何落地
在快速迭代的软件开发环境中,精准测试作为一种高效、针对性的测试方法,正逐步成为企业的首选。本文探讨了精准测试的落地方法、对质量指标的影响、数据统计与跟踪度量、提高投入产出收益率的策略及卡点数据的具体内容。通过优化测试用例、代码关联、技术融合及流程优化,精准测试能够显著提升软件质量和测试效率。
|
SQL 监控 数据库
慢SQL对数据库写入性能的影响及优化技巧
在数据库管理系统中,慢SQL(即执行缓慢的SQL语句)不仅会影响查询性能,还可能对数据库的写入性能产生显著的不利影响
|
Prometheus 监控 Cloud Native
实时计算 Flink版产品使用合集之将CURRENT_TIMESTAMP转换为长整型的数据(即毫秒数)如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
218 3
|
canal 关系型数据库 MySQL
"揭秘阿里数据同步黑科技Canal:从原理到实战,手把手教你玩转MySQL数据秒级同步,让你的数据处理能力瞬间飙升,成为技术界的新晋网红!"
【8月更文挑战第18天】Canal是一款由阿里巴巴开源的高性能数据同步系统,它通过解析MySQL的增量日志(Binlog),提供低延迟、可靠的数据订阅和消费功能。Canal模拟MySQL Slave与Master间的交互协议来接收并解析Binary Log,支持数据的增量同步。配置简单直观,包括Server和Instance两层配置。在实战中,Canal可用于数据库镜像、实时备份等多种场景,通过集成Canal Client可实现数据的消费和处理,如更新缓存或写入消息队列。
1609 0
多重比较示例:Bonferroni校正法和Benjamini & Hochberg法
多重比较示例:Bonferroni校正法和Benjamini & Hochberg法
|
Shell 测试技术 Android开发
掌握ADB:详解操作命令及完整用法指南(二)
**ADB摘要** Android Debug Bridge (ADB) 是用于PC与Android设备通信的调试工具。本文聚焦于`adb shell am`命令,用于控制设备执行操作,如启动应用: ```bash adb shell am start &lt;package&gt;/&lt;activity&gt; ``` 它还用于测量应用启动时间。`dumpsys window`命令获取包名和界面信息。ADB还能模拟手机按键,如点击、滑动、输入文本和控制音量。此外,通过`dumpsys cpuinfo`和`meminfo`可检查CPU和内存使用情况。这些在自动化测试中非常有用。
|
vr&ar C语言
计算机网络:信道复用
计算机网络:信道复用
697 0
|
JSON 小程序 JavaScript
【微信小程序】-- 宿主环境 & 通信模型 & 运行机制介绍(五)
【微信小程序】-- 宿主环境 & 通信模型 & 运行机制介绍(五)
|
Kubernetes 应用服务中间件 nginx
容器诊断工具之netshoot
netshoot介绍netshoot是一款开源的容器网络诊断工具,本质上是一个容器,里面默认安装了一些常用网络诊断工具,如tcpdump、netstat等,被称为网络排障瑞士军刀容器。netshoot众所周知,容器下网络空间是相互隔离的,与宿主机的网络空间也是隔离的,往往需要通过工具进入容器空间排查...
1107 0
容器诊断工具之netshoot