| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> 梳理 React 18 的新特性 -> 正文阅读 |
|
[JavaScript知识库]梳理 React 18 的新特性 |
React 18 推出了一些令人兴奋的新改进。一年前宣布 React 18 时,团队承诺逐步采用策略。 现在,一年后,可以应用程序升级到最新版本。 总而言之,它还带来了开箱即用的性能改进,包括默认更多的批处理,这消除了在应用程序或库代码中手动批处理更新的需要。 本文一起深入了解 React 18 带来的一些最重要的新变化。 使用 createRoot 替换 render
?为确保您正确迁移应用程序,请尝试启用严格模式:
此外,如果使用 hydrate 进行 “hydration” 的服务端渲染,可以升级到 hydraRoot:?
自动批处理自动批处理意味着 React 现在将批处理您在组件中进行的更新。 批处理可以防止不必要的组件渲染。
前提是使用? createRoot? 而不是 render时。?如果组件中不需要自动批处理,可以随时使用 flushSync 选择退出:
对 setCounter 和 setFlag 的调用将立即尝试更新 DOM,而不是一起进行批处理。仅此一项新功能就可以改变应用程序的性能。只需更改为 createRoot 挂载应用程序即可使用。 TransitionsReact 18 引入了一个新的 transition?API。 transition是 React 中的一个新概念,用于区分紧急和非紧急更新。
比如一个具有搜索功能的页面。 将文本添加到输入字段后,希望看到该文本立即显示在那里。 这是一个紧急更新。 但是,当您键入时,立即显示用户搜索结果并不紧迫。 相反,开发人员通常会在显示搜索结果之前对用户的输入进行去抖动或限制。因此,在输入字段中输入或单击过滤器按钮是一项紧急更新。 显示搜索结果不是紧急更新,它被视为过渡更新。 也可以使用名为 useTransition 的 hook 来获取过渡的标志,如下所示:
包含在 startTransition 中的更新被视为非紧急更新,如果出现更紧急的更新(如点击或按键),则 startTransition 中的更新会被中断。假设转换被用户打断(例如,通过连续键入多个字符)。 在这种情况下,React 将丢弃未完成的陈旧渲染工作,仅渲染最新更新。
这个过程中,React 将做三件事情:
服务端 SuspenseSuspense 现在在服务器上可用。 以前,它可以在客户端使用 React.lazy 进行代码拆分。 但是现在,可以在组件 “Suspense” 时使用某种占位符。Suspense 意味着组件还没有准备好渲染 —— 它可能缺少数据或代码。如果使用 Suspense,服务器上的慢速渲染组件将不再阻碍整个页面。如果一个组件 Suspense,它上层最近的 Suspense 组件会“捕获”它,无论中间有多少组件。
在上面的例子中,如果 ProfileHeader Suspense,那么整个页面将被 PageSkeleton 替换。但是,如果 Comments 组件或 Photos组件 Suspense,它们都将被 LeftColumnSkeleton 替换。 这使得可以根据可视化 UI 设计的粒度安全地添加和删除 Suspense 边界,而不必担心可能依赖于异步代码和数据的组件。可以在关于 SSR Suspense 的详细 GitHub 讨论中了解更多信息。 新的 HooksuseId
useTransitionuseTransition 是新的 hook,返回转换的挂起状态的有状态值,以及启动它的函数。
startTransition 允许将回调中的更新标记为 transiton; isPending 指示 transiton 何时处于 active 状态: useDeferredValueuseDeferredValue 允许推迟重新渲染树的非紧急部分。它类似于去抖动或节流,但有一些优点。 没有固定的时间延迟,因此 React 将在第一次渲染反映在屏幕上后立即尝试延迟渲染。 延迟渲染是可中断的,不会阻止用户输入。比如:
上述例子中,SearchSuggestions 组件将仅在 deferredQuery 更新时重新呈现。 为了将所有内容联系在一起,当 SearchSuggestions suspended 时,我们会看到“正在加载搜索结果...”的文本。? useSyncExternalStoreuseSyncExternalStore 是用于以与选择性水合和时间切片等并发渲染功能兼容的方式从外部数据源读取和订阅的 hook。此 hook 适用于维护第三方库的作者,通常不用于应用程序代码。 useInsertionEffectuseInsertionEffect 的签名与 useEffect 相同,但它在所有 DOM 突变之前同步触发。 这个 hook 用于在?useLayoutEffect 中读取布局之前将样式注入 DOM。 它无权访问 refs,也无法安排更新。useInsertionEffect 仅限于 css-in-js 库作者。 其他1. 可以渲染? 2. React 现在依赖于现代浏览器功能,包括 |
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 19:38:30- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |