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

  • 孙春兰强调 总结基层经验做法 推动防控措施持续优化

    孙春兰强调 总结基层经验做法 推动防控措施持续优化

  • 新的网站怎么进行宣传推广,丰富和完善网站优化内容(新的网站怎么进不去)

    新的网站怎么进行宣传推广,丰富和完善网站优化内容(新的网站怎么进不去)

  • 怎样进行论坛发贴推广(在论坛上怎么发帖子)

    怎样进行论坛发贴推广(在论坛上怎么发帖子)

  • 万家乐e2热水器故障怎么解决(万家乐热水器e2故障排除)

    万家乐e2热水器故障怎么解决(万家乐热水器e2故障排除)

  • 大疆无人机飞行高度(大疆无人机飞行记录)

    大疆无人机飞行高度(大疆无人机飞行记录)

  • 抖音字错了发表作品怎么改(抖音发的作品字打错了能不能改过来)

    抖音字错了发表作品怎么改(抖音发的作品字打错了能不能改过来)

  • win10开始菜单键不见了(win10开始菜单不见了)

    win10开始菜单键不见了(win10开始菜单不见了)

  • 快手黄钻是怎么得到的(快手黄钻怎么兑换)

    快手黄钻是怎么得到的(快手黄钻怎么兑换)

  • 苹果11发不出去短信怎么回事(苹果11发不出去短信)

    苹果11发不出去短信怎么回事(苹果11发不出去短信)

  • MacBookAirA1932是什么型号(macbookaira1932是什么型号)

    MacBookAirA1932是什么型号(macbookaira1932是什么型号)

  • set键是什么功能(set-按键)

    set键是什么功能(set-按键)

  • 微信视频可以设置成不占线吗(微信视频可以设置美颜吗)

    微信视频可以设置成不占线吗(微信视频可以设置美颜吗)

  • oppo卸载的软件如何恢复(oppo卸载的软件有记录吗?)

    oppo卸载的软件如何恢复(oppo卸载的软件有记录吗?)

  • app闪退是什么原因(app闪退是什么原因 怎么解决华为)

    app闪退是什么原因(app闪退是什么原因 怎么解决华为)

  • iphone7人像模式在哪(苹果7有人像模式)

    iphone7人像模式在哪(苹果7有人像模式)

  • 为什么爱奇艺没有字幕(为什么爱奇艺没有声音)

    为什么爱奇艺没有字幕(为什么爱奇艺没有声音)

  • 怎么把b站视频转为音频(怎么把b站视频的音频提取出来)

    怎么把b站视频转为音频(怎么把b站视频的音频提取出来)

  • 戴尔笔记本怎么添加控制面板(戴尔笔记本怎么设置u盘启动)

    戴尔笔记本怎么添加控制面板(戴尔笔记本怎么设置u盘启动)

  • vivo nex3支持几倍变焦(vivo nex3多大)

    vivo nex3支持几倍变焦(vivo nex3多大)

  • 拼多多评论怎么看不到(拼多多评论怎么加好友)

    拼多多评论怎么看不到(拼多多评论怎么加好友)

  • 知乎怎么设置隐私(知乎怎么设置隐私主页)

    知乎怎么设置隐私(知乎怎么设置隐私主页)

  • CAD图形界限怎么取消(cad图形界限怎么设置)

    CAD图形界限怎么取消(cad图形界限怎么设置)

  • 公式循环引用警告怎么处理(如何解决公式循环引用)

    公式循环引用警告怎么处理(如何解决公式循环引用)

  • iphone7强制恢复出厂(iphone7强制恢复出厂设置重新激活)

    iphone7强制恢复出厂(iphone7强制恢复出厂设置重新激活)

  • 增值税视同销售账务处理怎么做?
  • 个人独资企业需要交什么税
  • 一般纳税人什么条件
  • 小规模印花税是季报还是月报
  • 其他应收款有哪些情况
  • 内涵报酬率和必要投资报酬率
  • 已导出的申报表如何修改
  • 劳务公司代发工资合法吗
  • 企业自建固定资产
  • 建筑服务专用发票需要进项吗
  • 企业间拆借资金是否缴税
  • 跨月的普通发票怎么开
  • 采购商品未入库的会计分录
  • 承兑汇票兑现怎么填写
  • 收到股本的现金怎么做账
  • 费用分摊怎么算
  • 销售时无法确认发票
  • 减少其他应付款冲费用做以前年度损益调整如何做分录
  • 怎样根据利润表做资产负债表
  • 少数股东持股比例
  • 并购动因理论有什么
  • 总分公司企业所得税合并申报
  • SIMETER.EXE - SIMETER是什么进程 有什么用
  • 工程结算和决算一样吗
  • windows无法验证显卡驱动的数字签名
  • 生产型企业出口退税退的是哪部分的税
  • 在树洞中休息的英语
  • codeignitor
  • php 上传文件
  • thinkphp jquery实现图片上传和预览效果
  • 精读论文分析
  • 想学web前端
  • 投资房地产的后续计量有哪些
  • nmcli命令配置bond
  • 企业之间收的借款利息该如何交税 原文
  • 企业注销时应收账款需要交税吗
  • 增值税普通发票查询真伪
  • 不缴纳增值税的收入需要缴纳水利税吗
  • 帝国cms功能
  • mongodb win7
  • 民办学校学费收现金
  • 生产企业生产车间人员密度是多少
  • 字符串合并函数
  • 存货减值税前可抵扣吗
  • 库存商品转出
  • 减免税的三种方式
  • 发票一般会失效几天
  • 待抵扣进项税额和待认证进项税额的区别
  • 一般纳税人改成小规模可以吗
  • 单位收到社保补贴会计怎样处理
  • 开发成本怎么做分录
  • 投资性房地产抵债怎么做账务处理
  • 企业接受股东划入资产的处理
  • 月末如何计提增值税附加及增值税
  • 公对公房产过户
  • 现金流量表中支付的各项税费包括
  • 违约金进项税额可否抵扣 分录
  • sql server错误和使用情况报告
  • 正确使用显微镜的七个步骤
  • sql 查询优化
  • mysql查询单条数据
  • centos编译器
  • java开发经常出差合理吗
  • 怎么调win7
  • ubuntu安装quagga
  • OS X Yosemite系统怎么制作u盘安装盘
  • centos启动按e没用
  • scrnsave.exe
  • QT for Android HelloWorld实现
  • node.js利用cas实现单点登录
  • 关于javascript的说法
  • CloudEditText
  • jqueryon事件
  • JQuery EasyUI Layout 在from布局自适应窗口大小的实现方法
  • android ui自动化测试
  • 陕西税务厅
  • 破产重整期间的税收
  • 代建单位资质要求
  • 深圳国税咨询电话是多少
  • 什么是私人帐户
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设