位置: IT常识 - 正文

React 18 特性(react 16新特性)

编辑:rootadmin
原文链接 2022 年 3 月 29 日,React 18 正式版发布了。 新增了以下这些新功能 Concurrent Mode 并发模式 在 CM 模式下,React 在执行过程中,每执行一个 Fiber,都会看看有没有更高优先级的更新,如果有,则当前低优先级的的更新会被暂停,待高优先级任务执行完 ...

推荐整理分享React 18 特性(react 16新特性),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:react17新增特性,react新特性,react16.8新特性,react 17,react18新特性,react18特性,react新特性17,react18特性,内容如对您有帮助,希望把文章链接给更多的朋友!

原文链接

2022 年 3 月 29 日,React 18 正式版发布了。

新增了以下这些新功能

Concurrent Mode 并发模式

在 CM 模式下,React 在执行过程中,每执行一个 Fiber,都会看看有没有更高优先级的更新,如果有,则当前低优先级的的更新会被暂停,待高优先级任务执行完之后,再继续执行或重新执行。

startTransition

React 的状态更新可以分为两类:

紧急更新(Urgent updates):比如打字、点击、拖动等,需要立即响应的行为,如果不立即响应会给人很卡,或者出问题了的感觉过渡更新(Transition updates):将 UI 从一个视图过渡到另一个视图。不需要即时响应,有些延迟是可以接受的。

默认的setState是紧急更新,startTransition包裹的setState是非紧急更新。React 会在高优先级更新渲染完成之后,才会启动低优先级更新渲染,并且低优先级渲染随时可被其它高优先级更新中断。

// 紧急的setInputValue(e.target.value);startTransition(() => { setSearchQuery(input); // 非紧急的});自动批处理 Automatic Batching

批处理是指 React 将多个状态更新,聚合到一次 render 中执行,以提升性能。

React 18 特性(react 16新特性)

在 React 18 之前,React 只会在事件回调中使用批处理,而在 Promise、setTimeout、原生事件等场景下,是不能使用批处理的。

而在 React 18 中,所有的状态更新,都会自动使用批处理,不关心场景。

function handleClick() { setCount(c => c + 1); setFlag(f => !f); // React 只会 re-render 一次,这就是批处理}setTimeout(() => { setCount(c => c + 1); setFlag(f => !f); // React 只会 re-render 一次,这就是批处理}, 1000);

如果你在某种场景下不想使用批处理,你可以通过 flushSync来强制同步执行

import { flushSync } from 'react-dom';function handleClick() { flushSync(() => { setCounter(c => c + 1); }); // React 更新一次 DOM flushSync(() => { setFlag(f => !f); }); // React 更新一次 DOM}

注意:自动批处理情况下在 Class 组件中,如果你在两次 setState 中间读取了 state 值,会出现不兼容的情况

// 不兼容handleClick = () => { setTimeout(() => { this.setState(({ count }) => ({ count: count + 1 })); // 在 React17 及之前,打印出来是 { count: 1, flag: false } // 在 React18,打印出来是 { count: 0, flag: false } console.log(this.state); this.setState(({ flag }) => ({ flag: !flag })); });};// 更改后兼容handleClick = () => { setTimeout(() => { ReactDOM.flushSync(() => { this.setState(({ count }) => ({ count: count + 1 })); }); // 在 React18,打印出来是 { count: 1, flag: false } console.log(this.state); this.setState(({ flag }) => ({ flag: !flag })); });};流式 SSR

SSR 一次页面渲染的流程大概为:

服务器 fetch 页面所需数据数据准备好之后,将组件渲染成 string 形式作为 response 返回客户端加载资源客户端合成(hydrate)最终的页面内容

而在 React 18 中,基于全新的 Suspense,支持了流式 SSR,也就是允许服务端一点一点的返回页面。

在 React 18 中,我们通过 Suspense包裹,可以告诉 React,我们不需要等这个组件,可以先返回其它内容,等这个组件准备好之后,单独返回。

更多关于流式 SSR 的讲解可见:https://github.com/reactwg/react-18/discussions/37

新 HooksuseDeferredValue

useDeferredValue 可以让一个 state 延迟生效,只有当前没有紧急更新时,该值才会变为最新值。useDeferredValue 和 startTransition 一样,都是标记了一次非紧急更新。

useId

支持同一个组件在客户端和服务端生成相同的唯一的 ID,避免 hydration 的不兼容。原理是每个 id 代表该组件在组件树中的层级结构。

useSyncExternalStore

useSyncExternalStore 能够让 React 组件在 Concurrent Mode 下安全地有效地读取外接数据源。在 Concurrent Mode 下,React 一次渲染会分片执行(以 fiber 为单位),中间可能穿插优先级更高的更新。假如在高优先级的更新中改变了公共数据(比如 redux 中的数据),那之前低优先的渲染必须要重新开始执行,否则就会出现前后状态不一致的情况。useSyncExternalStore 一般是三方状态管理库使用,一般我们不需要关注。

useInsertionEffect

这个 Hooks 只建议 css-in-js库来使用。这个 Hooks 执行时机在 DOM 生成之后,useLayoutEffect 生效之前,一般用于提前注入

本文链接地址:https://www.jiuchutong.com/zhishi/313160.html 转载请保留说明!

上一篇:vue3中使用scss加上scoped导致样式失效问题(vue动态修改scss变量)

下一篇:dedecms提示:Deprecated: __autoload() is deprecated, use spl_au(dedecms配置)

  • vivoy30是不是5G(vivoy30是不是屏幕指纹)

    vivoy30是不是5G(vivoy30是不是屏幕指纹)

  • iphone13promax刷新率哪里设置(iphone13promax调刷新)

    iphone13promax刷新率哪里设置(iphone13promax调刷新)

  • 抖音怎么设置下载视频权限(抖音怎么设置下滑自动播放下一条)

    抖音怎么设置下载视频权限(抖音怎么设置下滑自动播放下一条)

  • 微信怎么发live(微信怎么发live图)

    微信怎么发live(微信怎么发live图)

  • 苹果11打电话无网络(苹果11打电话无声,重启可以)

    苹果11打电话无网络(苹果11打电话无声,重启可以)

  • 如何设置应用使用时长(如何设置应用使用wifi)

    如何设置应用使用时长(如何设置应用使用wifi)

  • 小米10曲面屏边缘发绿(小米10曲面屏边框怎么拆)

    小米10曲面屏边缘发绿(小米10曲面屏边框怎么拆)

  • 抖音播放量上不去怎么回事(抖音增加播放量的软件)

    抖音播放量上不去怎么回事(抖音增加播放量的软件)

  • 电脑网络怎么启用dhcp(电脑网络怎么启动设置)

    电脑网络怎么启用dhcp(电脑网络怎么启动设置)

  • 笔记本充满电后是继续充还是拔掉(笔记本充满电后第二天就没电了)

    笔记本充满电后是继续充还是拔掉(笔记本充满电后第二天就没电了)

  • itunes软件是什么(itunes干啥的)

    itunes软件是什么(itunes干啥的)

  • word如何删除全部批注(word如何删除全部页脚)

    word如何删除全部批注(word如何删除全部页脚)

  • 红米note8怎么隐藏刘海(红米note8怎么隐藏应用)

    红米note8怎么隐藏刘海(红米note8怎么隐藏应用)

  • oppor17投屏功能怎么用(oppor17手机投射屏幕教程)

    oppor17投屏功能怎么用(oppor17手机投射屏幕教程)

  • 海康监控硬盘不存在(海康监控硬盘不显示画面)

    海康监控硬盘不存在(海康监控硬盘不显示画面)

  • 淘宝公益宝贝怎么设置(淘宝公益宝贝怎么加入)

    淘宝公益宝贝怎么设置(淘宝公益宝贝怎么加入)

  • app快剪辑怎么使用(快剪辑app使用教程)

    app快剪辑怎么使用(快剪辑app使用教程)

  • 抖音创作的原声上哪找(抖音创作的原声怎么搞)

    抖音创作的原声上哪找(抖音创作的原声怎么搞)

  • ufs3.0是什么意思(ufs3.0是什么意思中文)

    ufs3.0是什么意思(ufs3.0是什么意思中文)

  • 电脑隐藏软件图标教程(电脑隐藏软件图标快捷键)

    电脑隐藏软件图标教程(电脑隐藏软件图标快捷键)

  • Windows 10如何开启系统开机音乐(windows10如何开启wifi)

    Windows 10如何开启系统开机音乐(windows10如何开启wifi)

  • Mac中通过Dictionary翻译不同意思的单词(通过mac地址查找ip的协议)

    Mac中通过Dictionary翻译不同意思的单词(通过mac地址查找ip的协议)

  • 老老实实的程序员该如何描述自己的缺点(老老实实的人)

    老老实实的程序员该如何描述自己的缺点(老老实实的人)

  • WordPress安装主题的3种方法(wordpress安装主题致命错误)

    WordPress安装主题的3种方法(wordpress安装主题致命错误)

  • 纳税人办理退税流程
  • 合同资产指的什么
  • 物业公司物业费不开发票
  • 如何分析成本费用偏高
  • 电子发票怎么开具
  • 关联企业的费用包括
  • 残保金滞纳金能超过本金吗
  • 房租收据样式
  • 计提持有至到期投资减值准备
  • 产品成本核算需要经过哪些程序
  • 对外销售白酒如何纳税
  • 银行手续费要发票什么时候开始的
  • 已验旧和未验旧
  • 远程认证是什么意思
  • 公司为员工需要承担哪些责任
  • 退关税怎么入账
  • 企业收到供货单位提供的材料
  • 城建税和教育费附加可以税前扣除吗
  • 农产品加工所得税
  • 持续经营净利润和扣非净利润
  • 资本公积 税务
  • 免税的普通发票怎么开
  • 在王者荣耀中怎么找个妹子
  • 亿企代账怎么删除科目
  • bios如何设置光盘启动项
  • 实发工资和报税工资
  • 出口暂定关税
  • 准予从销项税额中扣除的有
  • 清除cookies有什么用
  • 腾讯电脑管家上的steam可以吗
  • 苹果电脑怎么快速
  • mac10.10.5系统
  • Win10 Build 19044.1319(21H1)预览版发布:修复 Bug提高安全性
  • 房地产企业预售房产怎么缴税
  • 企业设立的条件有哪些
  • uniapp监听网络状态
  • csrss是什么程序
  • 应付票据核算的票据包括
  • php和aspnet哪个好
  • vite搭建项目
  • 挂车车船税缴纳地点
  • php文件怎么写
  • 汽车4s店一般会摆放什么小零食
  • git代码提交规范
  • ps命令显示进程状态
  • django中httpresponse
  • 附表一般写在哪
  • 什么情况下需要异地预缴增值税
  • mongodb 教程
  • 小微企业所得税税率
  • 金税卡报税流程
  • 资本公积转为实收资本会计科目
  • 冲销未开票收入还需要申报吗
  • 销售货物的价外费用如何开票
  • 公司支付的培训费需要交税吗
  • 鉴证咨询公司
  • 审计测试会计分录怎么做
  • 卖掉公司旧办公用品怎么入账
  • 限定性净资产举例
  • winxp系统怎么投屏
  • ubuntu1
  • 深入解析linux内核
  • 系统如何修改
  • windows自带的应用程序
  • w7改w10硬盘怎么设置
  • mac安装软件提示无法检查更新
  • 四步制作的花
  • scumpve服务器
  • 高级控件动态数据加载过程有哪些
  • androidhomepage
  • pyqt用法
  • Python 中urls.py:URL dispatcher(路由配置文件)详解
  • python递归查找
  • jquery的动画效果
  • unity3d开发流程
  • 酷狗模拟场景怎么用
  • jquery作品
  • python按行写入txt
  • python5.7汉诺塔
  • 进境邮件补充申请
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设