@@ -16,15 +16,15 @@ React 18 现在可以在 npm 上使用啦!在我们的上一篇文章里,我
16
16
17
17
我们最新的主要版本更新的内容包括自动批处理等开箱即用能力优化,startTransition 等新的 API, 还有支持 Suspense 的流式服务端渲染。
18
18
19
- 这些 React 18 新功能很多都是基于我们新推出的并发渲染,也就是一种解锁了全新的强大力量的底层变动 。并发模式 React 是选择性启用的——只有当你使用了一个并发功能的时候才会开启——但是我们认为它将会对人们构建应用的方式产生巨大的影响。
19
+ 这些 React 18 新功能很多都基于我们新推出的并发渲染特性,也就是一种解锁了全新的能力强大的底层变动 。并发模式 React 是选择性启用的——只有当你使用了一个并发功能的时候才会开启——但是我们认为它将会对人们构建应用的方式产生巨大的影响。
20
20
21
- 我们花了很多年时间来研发 React 的并发渲染,同时我们也还考虑为现有用户提供一种过渡的路径。去年夏天,[ 我们成立了 React 18 工作组] ( /blog/2021/06/08/the-plan-for-react-18 ) 来收集社区专家们的反馈信息,保证整个 React 生态系统都能有一个丝滑的升级体验 。
21
+ 我们花了很多年时间来研发 React 的并发渲染,同时我们也还考虑为现有用户提供一种过渡的路径。去年夏天,[ 我们成立了 React 18 工作组] ( /blog/2021/06/08/the-plan-for-react-18 ) 来收集社区专家们的反馈信息,保证整个 React 生态都能有一个丝滑的升级体验 。
22
22
23
23
如果你忘了,我们在 React 大会 2021 上公开提出了这个愿景:
24
24
25
- * 在 [ 摘要] (https://www.youtube.com/watch?v=FZ0cG47msEk& * list=PLNG_1j3cPCaZZ7etkzWA7JfdmKWT0pMsa) 中,我们解释了 React 18 为什么能够实现让开发者创造更好的用户体验这一使命。
26
- * [ Shruti Kapoor] ( https://twitter.com/shrutikapoor08 ) [ 示范如何使用 React 18 中的新功能] ( https://www.youtube.com/watch?v=ytudH8je5ko&list=PLNG_1j3cPCaZZ7etkzWA7JfdmKWT0pMsa&index=2 )
27
- * [ Shaundai Person] ( https://twitter.com/shaundai ) gave us an overview of [ 支持 Suspense 的流式服务端渲染] ( https://www.youtube.com/watch?v=pj5N-Khihgc&list=PLNG_1j3cPCaZZ7etkzWA7JfdmKWT0pMsa&index=3 )
25
+ * 在 [ 摘要] ( https://www.youtube.com/watch?v=FZ0cG47msEk&list=PLNG_1j3cPCaZZ7etkzWA7JfdmKWT0pMsa ) 中,我们解释了 React 18 为什么能够实现让开发者创造更好的用户体验这一使命。
26
+ * [ Shruti Kapoor] ( https://twitter.com/shrutikapoor08 ) [ 示范了如何使用 React 18 中的新功能] ( https://www.youtube.com/watch?v=ytudH8je5ko&list=PLNG_1j3cPCaZZ7etkzWA7JfdmKWT0pMsa&index=2 ) 。
27
+ * [ Shaundai Person] ( https://twitter.com/shaundai ) 给了我们一个 [ 支持 Suspense 的流式服务端渲染] ( https://www.youtube.com/watch?v=pj5N-Khihgc&list=PLNG_1j3cPCaZZ7etkzWA7JfdmKWT0pMsa&index=3 ) 的概览。
28
28
29
29
以下是一个在此版本中对需要关注的内容的总结,先从并发渲染开始。
30
30
@@ -40,7 +40,7 @@ React 18 中最重要的更新内容是我们希望你永远不要考虑:并
40
40
41
41
并发渲染本身并不是一个功能。它是一个新的底层机制,使得 React 能够同时准备多个版本的 UI。你可以把并发视为一种实现细节——由于它解锁的新功能的缘故,它会非常有价值。React 使用在底层实现上使用了非常高级的技术,像优先队列和多级缓冲。但是你不会在任何公开的 API 中感知到这些。
42
42
43
- 我们设计 API 的时候,刻意隐藏了实现细节。作为一名 React 开发者,你只需要关注视图是 ** 什么样** ,然后由 React 来处理 ** 如何** 来实现。所以我们不需要React 开发者知道底层运行原理。
43
+ 我们设计 API 的时候,刻意隐藏了实现细节。作为一名 React 开发者,你只需要关注视图是 ** 什么样** ,然后由 React 来处理 ** 如何** 来实现。所以我们不需要 React 开发者知道底层运行原理。
44
44
45
45
不过,并发 React 比一个典型的实现细节更重要──它是 React 核心渲染模型的基础性更新。因此,虽然知道并发渲染底层工作原理不是很重要,但可能值得在高级技术方面去了解它是什么。
46
46
@@ -50,17 +50,17 @@ React 18 中最重要的更新内容是我们希望你永远不要考虑:并
50
50
51
51
另一个例子是可重用状态。并发 React 可以从屏幕中移除部分 UI,之后将他们再加回来,并重用之前的状态。例如,当一个用户标签页切出又切回,React 应该能够立即将之前的屏幕恢复到它先前的状态。在即将到来的次要版本中,我们计划添加一个新的名为 ` <Offscreen> ` 的组件,它实现了这种模式。同样地,你将能够使用 Offscreen 在后台准备新的 UI,在用户显示前准备就绪以便快速响应。
52
52
53
- 并发渲染是一个 React 中非常强大的工具,并且我们大多数新功能都是利用了它的优势来创建的,包括 Suspense,过渡和流式服务端渲染。但是在并发渲染这个新的基础上 ,React 18 也仅仅只是实现我们构建目标的第一步 。
53
+ 并发渲染是一个 React 中非常强大的工具,并且我们大多数新功能都是利用了它的优势来创建的,包括 Suspense,过渡和流式服务端渲染。但是在并发渲染这个方向 ,React 18 也仅仅只是实现我们最终目标的第一步 。
54
54
55
55
## 渐进地采用并发特性 {/* gradually-adopting-concurrent-features* /}
56
56
57
- 从技术上讲,并发渲染时一个破坏性变更。因为并发渲染时可中断的 ,当它启用时,组件行为会略微不同。
57
+ 从技术上讲,并发渲染是一个破坏性变更。因为并发渲染是可中断的 ,当它启用时,组件行为会略微不同。
58
58
59
59
在我们的测试过程中,我们已经把上千个组件更新到了 React 18。我们发现,几乎所有现有的组件仅能在并发渲染下“正常工作”。然而部分组件可能需要一些额外的迁移工作。这种变化通常很小,你仍然可以按照自己的节奏进行。React 18 中的新渲染行为 ** 只在你的应用中使用新功能的部分启用** 。
60
60
61
61
整体上的升级方案是使你的应用基于 React 18 运行而不用破坏现存的代码。然后你可以渐进地按照你的节奏开始添加并发功能。你可以在开发环境中使用 [ ` <StrictMode> ` ] ( /reference/react/StrictMode ) 以利于暴露并发模式相关的问题。严格模式不影响生产环境的,但是在开发环境中它将会上外额外的警告日志,并且被视为幂等的函数将被调用两次。这没办法捕获所有异常,但是能够有效预防大部分常见的错误类型。
62
62
63
- 在你升级到 React 18 后,你可以立即开始使用并发模式的功能。例如,你可以使用 startTransition 在屏幕内容之间进行导航,而不会阻塞用户输入。或者使用 useDeferredValue 来节流处理开销巨大的重绘 。
63
+ 在你升级到 React 18 后,你可以立即开始使用并发模式的功能。例如,你可以使用 startTransition 在屏幕内容之间进行导航,而不会阻塞用户输入。或者使用 useDeferredValue 来节流处理开销巨大的重渲染 。
64
64
65
65
无论如何,我们希望你在应用中添加并发渲染能力的主要方式是,使用一个支持并发渲染的库或者框架。在大多数情况中,你不用与并发模式的 API 直接交互。例如,在导航到一个新的屏幕时,开发者无需调用 startTransition,路由库会自动将导航操作包裹在 startTransition 中。
66
66
@@ -86,7 +86,7 @@ React 18 中最重要的更新内容是我们希望你永远不要考虑:并
86
86
87
87
### 新功能: 自动批处理 {/* new-feature-automatic-batching* /}
88
88
89
- 批处理是指,当 React 在一个单独的重绘中批量处理多个状态更新以此实现优化性能 。如果没有自动批处理的话,我们仅能够在 React 事件处理程序中批量更新。promise 内的更新,setTimeout,原生应用的事件处理程序或者任何其他事件,默认情况下在 React 中都不会被批处理;但现在,这些更新内容就会被自动批处理:
89
+ 批处理是指,当 React 在一个单独的重渲染事件中批量处理多个状态更新以此实现优化性能 。如果没有自动批处理的话,我们仅能够在 React 事件处理程序中批量更新。promise 内的更新,setTimeout,原生应用的事件处理程序或者任何其他事件,默认情况下在 React 中都不会被批处理;但现在,这些更新内容就会被自动批处理:
90
90
91
91
92
92
``` js
@@ -254,7 +254,7 @@ React 18 中的 Suspense 在与过渡 API 结合时效果最好。如果你在
254
254
255
255
#### useInsertionEffect {/* useinsertioneffect* /}
256
256
257
- ` useInsertionEffect ` 是一个新的 Hook ,允许 CSS-in-JS 库解决在渲染中注入样式的性能问题。除非你已经建立了一个 CSS-in-JS 库,否则我们不希望你使用它。这个 Hook 将在 DOM 被变更后运行,但在 layout effect 读取新布局之前。这解决了一个在 React 17 及以下版本中已经存在的问题,但在 React 18 中更加重要,因为 React 在并发渲染时向浏览器让步,给它一个重新计算布局的机会。 [ 参阅文档] ( /reference/react/useInsertionEffect ) .
257
+ ` useInsertionEffect ` 是一个新的 Hook ,允许 CSS-in-JS 库解决在渲染中注入样式的性能问题。除非你已经建立了一个 CSS-in-JS 库,否则我们不希望你使用它。这个 Hook 将在 DOM 被变更后运行,但在 layout effect 读取新布局之前。这解决了一个在 React 17 及以下版本中已经存在的问题,但在 React 18 中更加重要,因为 React 在并发渲染时向浏览器让步,给它一个重新计算布局的机会。 [ 参阅文档] ( /reference/react/useInsertionEffect ) 。
258
258
259
259
> Note
260
260
>
@@ -264,7 +264,7 @@ React 18 中的 Suspense 在与过渡 API 结合时效果最好。如果你在
264
264
265
265
请参阅 [ 如何升级到 React 18] ( /blog/2022/03/08/react-18-upgrade-guide ) 以获取分步说明和完整的中断列表和值得注意的变化。
266
266
267
- ## Changelog {/* changelog* /}
267
+ ## 修改日志 {/* changelog* /}
268
268
269
269
### React {/* react* /}
270
270
0 commit comments