位置: IT常识 - 正文

React 18 特性(react 16新特性)

发布时间:2024-01-29
原文链接 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配置)

  • 推广淘宝店商业策划书(给淘宝商家做推广)

    推广淘宝店商业策划书(给淘宝商家做推广)

  • 小度摄像头关闭怎么打开(小度摄像头关闭了是不是亮红灯)

    小度摄像头关闭怎么打开(小度摄像头关闭了是不是亮红灯)

  • 微信拍一拍如何操作(微信拍一拍如何撤回)

    微信拍一拍如何操作(微信拍一拍如何撤回)

  • 京东差评可以自己修改吗

    京东差评可以自己修改吗

  • 抖音播放量多少算正常(抖音播放量多少有收益)

    抖音播放量多少算正常(抖音播放量多少有收益)

  • 快手实名认证显示已被其他身份使用怎么办(快手实名认证显示已被其他账号认证怎么办)

    快手实名认证显示已被其他身份使用怎么办(快手实名认证显示已被其他账号认证怎么办)

  • 苹果11手电筒快捷键是什么(苹果11手电筒快捷关闭)

    苹果11手电筒快捷键是什么(苹果11手电筒快捷关闭)

  • 锂电池属于几类危险品(锂电池属于几类危险货物)

    锂电池属于几类危险品(锂电池属于几类危险货物)

  • qq下载的软件在通知栏删除不了(qq上下载的软件在哪)

    qq下载的软件在通知栏删除不了(qq上下载的软件在哪)

  • 打印机打印出来的纸有一条黑道怎么解决(打印机打印出来的纸黑乎乎的)

    打印机打印出来的纸有一条黑道怎么解决(打印机打印出来的纸黑乎乎的)

  • 手机不插卡能连wifi吗(手机不插卡能连wifi吗但不知道密码,怎么连)

    手机不插卡能连wifi吗(手机不插卡能连wifi吗但不知道密码,怎么连)

  • 快手订单怎么突然都没了(快手订单页面在哪)

    快手订单怎么突然都没了(快手订单页面在哪)

  • b站关注怎么设置不可见(B站关注怎么设置自动回复)

    b站关注怎么设置不可见(B站关注怎么设置自动回复)

  • qq隐身后是显示离线吗(qq隐身后是显示什么吗)

    qq隐身后是显示离线吗(qq隐身后是显示什么吗)

  • cazal00是什么型号(cam al00是什么手机)

    cazal00是什么型号(cam al00是什么手机)

  • ipad上面的小孔是干嘛的(ipad边上的小孔)

    ipad上面的小孔是干嘛的(ipad边上的小孔)

  • 微信号为什么会被冻结(微信号为什么会被盗)

    微信号为什么会被冻结(微信号为什么会被盗)

  • noc电脑怎么开机(∧oc电脑显示屏怎么开机)

    noc电脑怎么开机(∧oc电脑显示屏怎么开机)

  • 快手买东西订单怎么删除(快手买东西订单找不到了怎么办)

    快手买东西订单怎么删除(快手买东西订单找不到了怎么办)

  • 怎么使用微信扫码支付(怎么使用微信扫一扫登录王者荣耀)

    怎么使用微信扫码支付(怎么使用微信扫一扫登录王者荣耀)

  • 抖音怎么首发音乐(抖音里面怎么首发音乐)

    抖音怎么首发音乐(抖音里面怎么首发音乐)

  • 三星s9可以快充吗(三星s9快充多少w)

    三星s9可以快充吗(三星s9快充多少w)

  • 鸿蒙系统怎么升级mate30 华为Mate30升级鸿蒙系统步骤教程(鸿蒙系统怎么升级3.0)

    鸿蒙系统怎么升级mate30 华为Mate30升级鸿蒙系统步骤教程(鸿蒙系统怎么升级3.0)

  • XGBoost模型调参:GridSearchCV方法网格搜索优化参数(模型调参是调节什么)

    XGBoost模型调参:GridSearchCV方法网格搜索优化参数(模型调参是调节什么)

  • 补缴以前年度附加税如何入账
  • 增值税专用发票电子版
  • 小规模纳税人加油发票可以抵扣吗
  • 借贷记账法的基本结构
  • 小规模城建税和教育费附加怎么算
  • 农产品普票进项税抵扣怎么做账
  • 单位购买预付卡
  • 餐饮消费方式
  • 预收账款本期发生额怎么算
  • 预收账款怎样清零
  • 已认证的红字发票怎么退
  • 以资抵债是利空还是利好
  • 收到美元货款兑换人民币流程
  • 小规模代扣代缴个税会计分录
  • 当月认证的发票可以当月抵扣吗
  • 企业购销业务流程包括哪些
  • 跨年度的费用发票可以入账吗
  • 戴尔开启vt教程
  • win7电脑加入域
  • 请等待当前程序完成或更改怎么弄
  • Win11如何关闭屏保上的广告
  • 临时 文件夹
  • 结转存货的成本叫什么
  • linux乱码怎么改
  • 最贵的苹果4
  • 劳务派遣企业简易征收管理办法
  • 进价金额核算法例题
  • php xdebug配置
  • 金蝶财务软件总监是谁
  • 领航ct
  • 研发支出资本化支出属于什么科目
  • 产品检测费可以放入研发费用吗
  • 税控盘全额抵扣发票怎么勾选
  • 资产负债表中应交税费为负数是什么意思
  • 外贸企业账务处理方法
  • seacms error怎么办
  • 税控盘的进项税在哪里申报
  • 外籍个人是否可以买社保
  • 红字冲销怎么做账
  • 共管账户取钱需要多久到账
  • 申请专利的费用怎么入账
  • 收到以前年度税费返还的会计分录
  • 营业外收入是否影响营业利润
  • 飞机发票和行程单一样吗
  • 水费发票上的册子是什么
  • 企业租用个人房屋的财税处理
  • mysql解压版安装教程5.7.20
  • ios 数据库版本升级
  • 详解标准mysql(x64) Windows版安装过程
  • ubuntu 16.04
  • 苹果系统装win8
  • redhat配置
  • 电脑xp系统虚拟内存不足怎么解决
  • Win10 Mobile 10586.306提前上手视频评测
  • 使用jQuery获取data-的自定义属性
  • 环境篇作文
  • shell脚本实现自动化巡检报警发送邮箱
  • 怎样用在js中使用css的内容
  • linux 定时任务
  • 播放一个灵异电影
  • node.js怎么用
  • javascript高级程序设计最新版
  • web开发 java
  • jquery使用jsonp
  • 详解python时间模块中的datetime模块
  • asynctask缺点
  • javascript基本语句
  • 力所能及之处,定当竭尽所能
  • python 观察者
  • jquery实例
  • 怎么在手机开数据那里看用了多少流量
  • 新办企业没有员工要报个人所得税吗
  • 环保税征收标准可以改吗
  • 发票缴销办理流程图
  • 每年个人所得税2万工资多少
  • 商铺缴纳契税需要复印件吗
  • 教育培训行业的发展
  • 成都市水源地及饮用水的水质情况
  • 尾矿治理文件
  • 税务干部提升工作能力
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号