最新的主要版本包括开箱即用的改进,如自动批处理、startTransition 等新 API,以及支持 Suspense 的流式服务器端渲染。
React 18中的许多功能都是建立在我们新的并发渲染器之上的,这是一个幕后的变化,释放了强大的新功能。并发React是可选的--只有当你使用并发功能时才会启用--但我们认为它将对人们构建应用程序的方式产生重大影响。
我们花了数年时间研究和开发对React并发的支持,我们还特别注意为现有用户提供一个渐进的采用路径。
并发本身并不是一个功能。它是一种新的幕后机制,使React能够同时准备多个版本的UI。你可以把并发看作是一个实现细节--它的价值在于它所解锁的功能。
React在其内部实现中使用了复杂的技术,比如优先级队列和多重缓冲。但你不会在我们的公共API中看到这些概念。
当我们设计API时,我们试图向开发者隐藏实现细节。作为一个React开发者,你专注于你想要的用户体验,而React处理如何提供这种体验。
自动批处理
批处理是指React将多个状态更新分组到一个重新渲染中,以获得更好的性能。如果没有自动批处理,我们只对React事件处理程序中的更新进行批处理。默认情况下,React不会对promises、setTimeout、本地事件处理程序或任何其他事件中的更新进行批处理。有了自动批处理,这些更新将被自动批处理。
Transitions
过渡transition 是React的一个新概念,用于区分紧急和非紧急更新。
立急更新反映了直接的交互,比如打字、点击、按压等等。像打字、点击或按压这样的紧急更新,需要立即响应,以符合我们对物理对象行为方式的直觉。否则他们就会感觉 "不对劲"。
然而,过渡是不同的,过渡transition更新则是将用户界面从一个视图过渡到另一个视图。因为用户并不期望在屏幕上看到每个过渡过程的中间值。
Suspense
在React 18中,你可以开始使用Suspense在Relay、Next.js、Hydrogen或Remix等有意见的框架中进行数据获取。使用Suspense进行特别的数据获取在技术上是可行的,但仍不建议作为一般策略。
如果组件树的某一部分还没有准备好被显示,暂停让你声明性地指定它的加载状态。
<Suspense fallback={<Spinner />}> |
Suspense使 "UI加载状态 "成为React编程模型中的第一类声明性概念。这让我们可以在它上面建立更高层次的功能。
新的客户端和服务器渲染API
在这个版本中,我们利用机会重新设计了我们为客户端和服务器上的渲染所暴露的API。这些变化允许用户继续使用React 17模式下的旧API,同时升级到React 18的新API。
- React DOM客户端
- createRoot。新的方法来创建一个根来渲染或卸载。使用它来代替ReactDOM.render。没有它,React 18的新功能就不能工作。
- hydrateRoot: 新的方法来给服务器渲染的应用程序注入水分。使用它代替ReactDOM.hydrate与新的React DOM Server APIs一起使用。没有它,React 18的新功能就不能工作。
- React DOM服务器
- renderToPipeableStream:用于Node环境下的流媒体。
- renderToReadableStream:用于现代边缘运行环境,如Deno和Cloudflare工作者。
新钩子
- useId
- useTransition
- useDeferredValue
- useSyncExternalStore
- useInsertionEffect
详细点击标题