位置: 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配置)

  • word画笔在哪(word画笔在哪wps)

    word画笔在哪(word画笔在哪wps)

  • 在医院做了核酸检测手机上怎么查(在医院做了核酸在哪里看结果)

    在医院做了核酸检测手机上怎么查(在医院做了核酸在哪里看结果)

  • 荣耀30pro支持隔空手势的吗(荣耀30pro+能隔空操作吗)

    荣耀30pro支持隔空手势的吗(荣耀30pro+能隔空操作吗)

  • 华为荣耀v20与vivoiqoo对比(华为荣耀v20和华为v20一样吗)

    华为荣耀v20与vivoiqoo对比(华为荣耀v20和华为v20一样吗)

  • ps ae pr ai是什么软件(ps pr ai au都是干嘛的)

    ps ae pr ai是什么软件(ps pr ai au都是干嘛的)

  • 4.7寸手机有哪几款(4.7寸手机有哪几款r,苹果5.0,苹果手机5.0的)

    4.7寸手机有哪几款(4.7寸手机有哪几款r,苹果5.0,苹果手机5.0的)

  • 企业视频彩铃什么意思(企业视频彩铃产品是什么)

    企业视频彩铃什么意思(企业视频彩铃产品是什么)

  • 苹果有锁机可以升级系统吗(苹果有锁机可以买吗)

    苹果有锁机可以升级系统吗(苹果有锁机可以买吗)

  • 安卓是哪个国家开发的(安卓是哪个国家的手机)

    安卓是哪个国家开发的(安卓是哪个国家的手机)

  • 小米9wifi速度慢(小米9连接wifi网速慢)

    小米9wifi速度慢(小米9连接wifi网速慢)

  • 淘宝危及交易怎么回事(淘宝危及交易怎么触发的)

    淘宝危及交易怎么回事(淘宝危及交易怎么触发的)

  • 打印机不能连续打印只能打一张(打印机不能连续打印怎么解决)

    打印机不能连续打印只能打一张(打印机不能连续打印怎么解决)

  • 什么是internet的主要互联设备(什么叫internet)

    什么是internet的主要互联设备(什么叫internet)

  • 用开发者模式伤手机吗(用开发者模式伤内存吗)

    用开发者模式伤手机吗(用开发者模式伤内存吗)

  • 红米k30是多少瓦快充(红米k6012+256多少钱)

    红米k30是多少瓦快充(红米k6012+256多少钱)

  • 手机优酷视频怎么保存到手机相册(手机优酷视频怎么扫码登录的二维码在哪扫)

    手机优酷视频怎么保存到手机相册(手机优酷视频怎么扫码登录的二维码在哪扫)

  • iphone11配无线耳机吗(iphone 11配耳机)

    iphone11配无线耳机吗(iphone 11配耳机)

  • 淘宝店铺分数在哪里查(淘宝店铺分数多久清零)

    淘宝店铺分数在哪里查(淘宝店铺分数多久清零)

  • 华为mate30几个卡槽(华为mate30与mate30pro的区别)

    华为mate30几个卡槽(华为mate30与mate30pro的区别)

  • word高级选项在哪里(word2007高级选项)

    word高级选项在哪里(word2007高级选项)

  • x没有面容影响使用吗(x没面容什么意思)

    x没有面容影响使用吗(x没面容什么意思)

  • 苹果手机里的手势是干嘛用的(苹果手机里的手电筒在哪里找)

    苹果手机里的手势是干嘛用的(苹果手机里的手电筒在哪里找)

  • 月亮模式怎么开(华为手机超级月亮模式怎么开)

    月亮模式怎么开(华为手机超级月亮模式怎么开)

  • 鸿蒙系统按键解锁息屏有延迟怎么解决?鸿蒙系统按键解锁息屏延迟解决方法(鸿蒙系统快捷键)

    鸿蒙系统按键解锁息屏有延迟怎么解决?鸿蒙系统按键解锁息屏延迟解决方法(鸿蒙系统快捷键)

  • 个人所得税生产经营所得税率
  • 增值税期初应补税额计算
  • 小微企业增值税优惠政策最新2023
  • 生产经营所得税怎么申报
  • 小企业会计准则以前年度损益调整
  • 专用基金计入什么科目
  • 货物赔偿是否需要发票
  • 银行收取的利息要交税吗
  • 免抵退税申报汇总表下载
  • 会计计提和冲回
  • 长期待摊费用多少钱
  • 小规模开3%专票可享受减免
  • 此次新政策对原来就是小型微利企业的纳税人有影响吗?
  • 善意取得虚开增值税专用发票追征期
  • 党费返还款怎么做分录
  • 个人出租住房需要交城镇土地使用税吗
  • 开办费 工资
  • 预收账款与应收账款为什么合并
  • 购入办公楼按多少折算
  • 腾讯电脑管家网址多少
  • 农产品进项转出的规定
  • 快启动u盘怎么打开
  • 银行保证金账务处理流程
  • 怎么提升电脑速度
  • 无形资产的摊销计入什么科目
  • 无线路由器怎么连接
  • 格拉斯伯格
  • 成本结转的科目
  • 计提坏账准备的公式
  • uniapp webgl
  • 夕阳下的大白鲨过山车,美国新泽西州 (© John Van Decker/Alamy)
  • vue控制按钮是否禁用
  • thinkphp post
  • JavaScript之Ajax-axios表单提交
  • 你让他心动他让你心安
  • 网络命令traceroute
  • tracetcp命令
  • 命令start
  • 数据库触发器db2什么意思
  • 物流行业的会计有前途吗
  • 全资子公司注销的账务处理
  • mysql数据库优化及sql调优
  • 现金支票最少多少起提
  • 工程的直接成本包括哪些内容
  • 计提生产经营所得
  • 法人买社保又不发工资怎么做账
  • 应付账款尾款怎么处理
  • 计提租金如何做账务处理
  • 结转完期间损益是不是可以结账了
  • 数字证书如何申报社保
  • 债权方的视同购进怎么会计处理?
  • 增值税直接减免额怎么做账
  • 代扣个人所得税怎么算
  • 油费可以进项抵税吗
  • 会计分录什么时候用负数表示
  • 税务局退款会计分录
  • 建筑工程购买的搬运设备升降平台分录
  • 启用账簿时应在账簿上签名或盖章的是
  • mysqlsum查询慢
  • freebsd默认账户密码
  • windows10 rs2
  • 在linux2.4.0版本中
  • ssh可防止什么攻击
  • [置顶]JM259194
  • 批处理命令教程
  • unity study
  • JavaScript中数组长度的属性
  • android图库
  • 深入理解linux内核第三版
  • ORMLite完全解析(四) 官方文档第四章、在Android中使用
  • 每天一篇文章锻炼口才的文章
  • webview自定义视频播放器
  • 如何搭建应用服务器
  • python如何搭建环境
  • js中bom是什么意思
  • android java编程
  • 北京市税务局 案件
  • 税务总局和各省税务机关
  • 增值税发票报税流程
  • 融资租赁 合同
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设