广告
返回顶部
首页 > 资讯 > 精选 >React18新增特性released怎么使用
  • 365
分享到

React18新增特性released怎么使用

2023-06-30 12:06:53 365人浏览 独家记忆
摘要

本文小编为大家详细介绍“React18新增特性released怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“React18新增特性released怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。新

本文小编为大家详细介绍“React18新增特性released怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“React18新增特性released怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

新功能:Automatic Batching

批处理是指 React 将多个状态更新分组到单个重新呈现中以获得更好的性能。在没有自动批处理的情况下,我们只在 React 事件处理程序中批处理更新。默认情况下,promises、setTimeout、本机事件处理程序或任何其他事件内部的更新不会在 React 中进行批处理。使用自动批处理时,将自动批处理这些更新:

// Before: only React events were batched.setTimeout(() => {  setCount(c => c + 1);  setFlag(f => !f);  // React will render twice, once for each state update (no batching)}, 1000);// After: updates inside of timeouts, promises,// native event handlers or any other event are batched.`setTimeout(() => {  setCount(c => c + 1);  setFlag(f => !f);  // React will only re-render once at the end (that's batching!)}, 1000);

新功能:Transitions

Transitions是 React 中的一个新概念,用于区分紧急和非紧急更新。

紧急更新反映了直接交互,如打字、单击、按下等。

过渡更新将 UI 从一个视图转换为另一个视图。

紧急更新,如打字,点击或按下,需要立即响应,以匹配我们对物理对象行为方式的直觉。否则他们会觉得"错了"。但是,过渡是不同的,因为用户不希望在屏幕上看到每个中间值。

例如,当您在下拉列表中选择筛选器时,您希望筛选器按钮本身在单击时立即响应。但是,实际结果可能会单独转换。一个小小的延迟是难以察觉的,而且往往是意料之中的。如果在结果渲染完成之前再次更改滤镜,则只需查看最新结果即可。

通常,为了获得最佳用户体验,单个用户输入应同时导致紧急更新和非紧急更新。您可以在输入事件中使用 startTransition api 来通知 React 哪些更新是紧急的,哪些是"转换":

import {startTransition} from 'react';// Urgent: Show what was typedsetInputValue(input);// Mark any state updates inside as transitionsstartTransition(() => {  // Transition: Show the results  setSearchQuery(input);});

startTransition 中包装的更新将作为非紧急更新进行处理,如果出现更紧急的更新(如单击或按键),则会中断。如果一个过渡被用户打断(例如,通过连续键入多个字符),React 将抛出未完成的陈旧的渲染工作,只渲染最新的更新。

useTransition:用于启动转换的挂钩,包括用于跟踪挂起状态的值。

startTransition:一种在无法使用挂钩时启动转换的方法。

转换将选择加入并发渲染,从而允许中断更新。如果内容重新挂起,过渡还会告诉 React 继续显示当前内容,同时在后台呈现过渡内容(有关详细信息,请参阅悬念 RFC)。

在此处查看有关过渡的文档.

新的Suspense功能

Suspense 允许您以声明方式指定组件树的某个部分的加载状态(如果该部分尚未准备好显示):

<Suspense fallback={<Spinner />}>  <Comments /></Suspense>

Suspense 使"UI 加载状态"成为 React 编程模型中的第一类声明性概念。这使我们能够在其上构建更高级别的功能。

几年前,我们推出了限量版的悬疑。但是,唯一受支持的用例是使用 React.lazy 进行代码拆分,并且在服务器上渲染时根本不支持。

在 React 18 中,我们在服务器上添加了对 Suspense 的支持,并使用并发渲染功能扩展了其功能。

React 18 中的悬念在与过渡 API 结合使用时效果最佳。如果在转换期间挂起,React 将阻止已经可见的内容被回退替换。相反,React 将延迟渲染,直到加载了足够的数据以防止错误的加载状态。

新的客户端和服务器Rendering APIs

在此版本中,我们借此机会重新设计了用于在客户端和服务器上呈现的 API。这些更改允许用户在升级到 React 18 中的新 API 时,在 React 17 模式下继续使用旧 API。

React DOM Client

这些新的 API 现在从 react-dom/client 导出:

createRoot:用于创建要render或unmount的根的新方法。使用它而不是 ReactDOM.render。React 18 中的新功能没有它就无法正常工作。

hydrateRoot:冻结服务器呈现的应用程序的新方法。将它而不是 ReactDOM.hydrate 与新的 React DOM Server API 结合使用。React 18 中的新功能没有它就无法正常工作。

createRoot 和 hydrateRoot 都接受一个名为 onRecoverableError 的新选项,以防您希望在 React 从渲染或用于日志记录的水化错误中恢复时收到通知。默认情况下,React 将在较旧的浏览器中使用 reportError 或 console.error。

React DOM Server

这些新的 API 现在从 react-dom/server 导出,并且完全支持服务器上的流式 Suspense:

renderToPipeableStream:用于在 node 环境中进行流式处理。

renderToReadableStream:适用于现代边缘运行时环境,如 Deno 和 Cloudflare worker。

现有的 renderToString 方法继续工作,但不鼓励使用。

新的Strict Mode Behaviors

以后我们希望添加一个功能,允许 React 在保留状态的同时添加和删除 UI 的各个部分。例如,当用户离开屏幕并返回时,React 应该能够立即显示上一个屏幕。为此,React 将使用与以前相同的组件状态卸载和重新挂载树。

此功能将为 React 应用程序提供更好的开箱即用性能,但要求组件能够灵活应对多次装载和破坏的效果。大多数效果无需任何更改即可工作,但有些效果假定它们只安装或销毁一次。

为了帮助解决这些问题,React 18 在严格模式下引入了一个新的仅限开发的检查。每当组件首次装载时,此新检查将自动卸载并重新装载每个组件,并在第二次装载时恢复以前的状态。

在此更改之前,React 将挂载组件并创建效果:

React mounts the component.

  • Layout effects are created.

  • Effects are created.

在 React 18 中的严格模式中,React 将模拟在开发模式下卸载和重新挂载组件:

React mounts the component.

  • Layout effects are created.

  • Effects are created.

React simulates unmounting the component.

  • Layout effects are destroyed.

  • Effects are destroyed.

React simulates mounting the component with the previous state.

  • Layout effects are created.

  • Effects are created.

新Hooks

useId

useId 是一个新的钩子,用于在客户端和服务器上生成唯一 ID,同时避免水化不匹配。它主要用于与需要唯一 ID 的辅助功能 API 集成的组件库。这解决了 React 17 及更低版本中已经存在的问题,但在 React 18 中更为重要,因为新的流式处理服务器呈现器如何无序地交付 html

useTransition

useTransition 和 startTransition 允许您将某些状态更新标记为不紧急。默认情况下,其他状态更新被视为紧急。React 将允许紧急状态更新(例如,更新文本输入)以中断非紧急状态更新(例如,呈现搜索结果列表)。

useDeferredValue

useDeferredValue 允许您推迟重新呈现树的非紧急部分。它类似于去抖动,但与它相比具有一些优点。没有固定的时间延迟,所以 React 会在第一个渲染反映在屏幕上后立即尝试延迟渲染。延迟的渲染是可中断的,并且不会阻止用户输入。

useSyncExternalStore

useSyncExternalStore 是一个新的挂钩,它允许外部存储通过强制对存储的更新进行同步来支持并发读取。在实现对外部数据源的订阅时,它消除了对 useEffect 的需求,并且建议用于与 React 外部的状态集成的任何库。

注意:useSyncExternalStore 旨在供库使用,而不是应用程序代码。

useInsertionEffect

useInsertionEffect 是一个新的钩子,它允许 CSS-in-js 库解决在渲染中注入样式的性能问题。除非你已经构建了一个CSS-in-JS库,否则我们不希望你使用它。此挂钩将在 DOM 发生突变后运行,但在布局效果读取新布局之前运行。这解决了 React 17 及更低版本中已经存在的问题,但在 React 18 中更为重要,因为 React 在并发渲染期间让位于浏览器,使其有机会重新计算布局。

注意:useInsertionEffect 旨在供库使用,而不是应用程序代码。

读到这里,这篇“React18新增特性released怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: React18新增特性released怎么使用

本文链接: https://www.lsjlt.com/news/328586.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • React18新增特性released怎么使用
    本文小编为大家详细介绍“React18新增特性released怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“React18新增特性released怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。新...
    99+
    2023-06-30
  • React18新增特性released的使用
    目录新功能:Automatic Batching新功能:Transitions新的Suspense功能新的客户端和服务器Rendering APIsReact DOM ClientR...
    99+
    2022-11-13
  • css3的边框新增加的特性怎么使用
    本篇内容主要讲解“css3的边框新增加的特性怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“css3的边框新增加的特性怎么使用”吧! ...
    99+
    2022-10-19
  • CSS媒体查询新增的特性怎么使用
    这篇文章主要介绍了CSS媒体查询新增的特性怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇CSS媒体查询新增的特性怎么使用文章都会有所收获,下面我们一起来看看吧。CSS @media 规范prefers-...
    99+
    2023-07-04
  • ES6新增的特性有哪些及怎么用
    这篇文章主要讲解了“ES6新增的特性有哪些及怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ES6新增的特性有哪些及怎么用”吧!理解ES6ECMAScr...
    99+
    2022-10-19
  • Vue3.0新特性怎么使用
    本篇内容主要讲解“Vue3.0新特性怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue3.0新特性怎么使用”吧!1、Vue3带来的新变化性能提升(零成本:从vue2切到vue3就享受到...
    99+
    2023-06-29
  • es6新特性怎么使用
    这篇“es6新特性怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“es6新特性怎么使用”文章吧。es6新特性有:1、l...
    99+
    2023-07-04
  • Java8新特性怎么使用
    本篇内容介绍了“Java8新特性怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Java语言新特性Lambda表达式Lambda表达式...
    99+
    2023-06-02
  • Vue3 style中新增的特性如何使用
    本文小编为大家详细介绍“Vue3 style中新增的特性如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue3 style中新增的特性如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。style新特...
    99+
    2023-07-06
  • HTML5的新特性怎么使用
    这篇“HTML5的新特性怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“HTML5的...
    99+
    2022-10-19
  • 怎么使用的新Java特性
    这篇文章主要讲解了“怎么使用的新Java特性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用的新Java特性”吧!1 Try-with-resource 语句使用 try-catch ...
    99+
    2023-06-15
  • Vue3 style中新增的特性有哪些及怎么用
    三、插槽选择器默认情况下,作用域样式不会影响到 <slot/> 渲染出来的内容,因为它们被认为是父组件所持有并传递进来的。使用 :slotted 伪类以确切地将插槽内容作为选择器的目标:<style scoped> ...
    99+
    2023-05-14
    Vue3 style
  • Java8新特性Stream流怎么使用
    本文小编为大家详细介绍“Java8新特性Stream流怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java8新特性Stream流怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Stream流的概...
    99+
    2023-07-02
  • CSS新特性content-visibility怎么使用
    这篇“CSS新特性content-visibility怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“CSS新特性co...
    99+
    2023-07-04
  • Go1.18新特性之泛型怎么使用
    本篇内容主要讲解“Go1.18新特性之泛型怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go1.18新特性之泛型怎么使用”吧!01 Go中的泛型是什么众所周知,Go是一门静态类型的语言。...
    99+
    2023-06-30
  • Java8并发新特性CompletableFuture怎么使用
    这篇文章主要介绍“Java8并发新特性CompletableFuture怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java8并发新特性CompletableFuture怎么使用”文章能帮...
    99+
    2023-06-30
  • 怎么用css3新增属性content
    这篇文章将为大家详细讲解有关怎么用css3新增属性content,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。     一、详解content属性 ...
    99+
    2022-10-19
  • Windows 10 Build 10130怎么快速升级? 新增特性汇总
    本周早些时候Windows Insider项目负责人Gabriel Aul在推文中透露公司正在测试最新的Windows 10版本,而今天微软宣布Fast Ring用户已经可以下载版本号为10130的最新版本,这离上次10...
    99+
    2023-06-15
    win10 10130 特性
  • CSS五个最新的特性怎么使用
    今天小编给大家分享一下CSS五个最新的特性怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一...
    99+
    2022-10-19
  • CSS动画新特性@scroll-timeline怎么使用
    这篇文章主要介绍“CSS动画新特性@scroll-timeline怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“CSS动画新特性@scroll-timeli...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作