我的编程空间,编程开发者的网络收藏夹
学习永远不晚

React18新增特性介绍

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

React18新增特性介绍

React 18 最新的特性
批处理文件
在同一个 函数中, 调用多次 useState 也只是会更新一次

function App() {
  const [count, setCount] = useState(0);
  const [flag, setFlag] = useState(false);
  function handleClick() {
    setCount(c => c + 1); // 不触发re-render
    setFlag(f => !f); // 不触发re-render
    // 在调用结束是只触发一次re-render(这就是batching)
  }
  return <button onClick={handleClick}>Next</button>;
}

但是在React 18以前,对于在异步回调中调用的updates,React Batching将无法生效:

function handleClick() {
  fetchSomething().then(() => {
  setCount(c => c + 1); // 触发re-render
  setFlag(f => !f); // 再次触发re-render
  });
}

这是因为在React 18之前,React只在事件处理程序期间批量更新。默认情况下,React不会对promise、setTimeout或任意event事件中的更新进行批处理。
在 React 18 版本 的这个flushSync 就可以达到批量更新

import { flushSync } from 'react-dom';
flushSync(() => {
setCount(c => c + 1); 
setFlag(f => !f); 
});

批量更新 但是render 值渲染一次, 节省了 dom的渲染性能

更新状态:

紧急更新(Urgent updates):反映直接的交互,如输入、点击、按键按下等等。

过渡更新(Transition updates):将UI从一个视图过渡到另一个视图。

输入、点击、按键按下等需要立即响应以符合人类的物理认知,符合人的直觉。但是过渡更新却不同,用户不会期望看到中间的转换过程(只需要结果),因此可能不需要立即更新视图。
在React 18以前的版本所有的更新都会认为是紧急更新。而startTransition提供api给用户来手动将某些更新标记为非紧急更新,从而避免浪费时间去渲染不必要的内容。

如下面的例子:

// 在界面上显示用户输入

setInputValue(input);

// 在界面上呈现查询结果

setSearchQuery(input);

setInputValue会立即更新用户的输入到界面上,属于需要紧急更新的操作。setSearchQuery是根据用户输入,查询相应的内容,用户可以输入很多次,如果一直查询会可能会导致过多的js计算消耗在查询上面(甚至阻塞输入操作),而一般来说用户的期望值是「等待输入完成之后,查询并显示最终的结果」,因此这里的setSearchQuery可以看成是非紧急更新。
通过startTransition包裹setSearchQuery将其标记为非紧急更新:

setInputValue(input);
// 标记为非紧急更新
startTransition(() => {
React.setSearchQuery(input);
});

setTimeout的区别

就上面setSearchQuery的例子,使用setTimeout(或者debounce or throttle)也能达到相似的目的,那这个startTransition和setTimeout有啥区别?
一个重要区别是setTimeout是「延迟」执行,startTransition是立即执行的,传递给startTransition的函数是同步运行,但是其内部的所有更新都会标记为非紧急,React将在稍后处理更新时决定如何render这些updates,这意味着将会比setTimeout中的更新更早地被render。

到此这篇关于React18新增特性介绍的文章就介绍到这了,更多相关React新特性内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

React18新增特性介绍

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

React18新增特性released怎么使用

本文小编为大家详细介绍“React18新增特性released怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“React18新增特性released怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。新
2023-06-30

Hibernate5新特性介绍

在hibernate5中,有了一些新的变动: 新引导 API Spatial/GIS 支持 Java 8 支持 扩展 AUTO id 生成支持 命名策略分离 属性转换器支持 更好的 “bulk id table” 支持
2023-05-31

Redis6的新特性介绍

本篇内容介绍了“Redis6的新特性介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 前言Redis 6 主要的变化有:SSL、ACLs、
2023-06-15

Redis 6.0 新特性 ACL 介绍

redis 6.0 acl 介绍 Redis 6.0 新特性 ACL 介绍Intro在 Redis 6.0 中引入了 ACL(Access Control List) 的支持,在此前的版本中 Redis 中是没有用户的概念的,其实没有办法很好的
Redis 6.0 新特性 ACL 介绍
2022-03-30

JDK8新特性详细介绍

函数式编程面向对象强调“一切皆对象”,如果想要做事情,必须要找到对象来做。函数式编程思想强调“做什么”,而不是“怎么做”。普通的开启线程// 匿名内部类对象Runnable task = new Runnable() { @Override pub
JDK8新特性详细介绍
2021-05-08

AnalyticDB for PostgreSQL 6.0 新特性介绍

阿里云 AnalyticDB for PostgreSQL 为采用MPP架构的分布式集群数据库,完备支持SQL 2003,部分兼容Oracle语法,支持PL/SQL存储过程,触发器,支持标准数据库事务ACID。ADB PG通过行存储、列存储
2023-06-03

jdk1.5、1.6、1.7新特性详细介绍

JDK 1.5(也称为Java 5)的新特性包括:1. 泛型:引入了泛型,使得可以在编译时检查和强制类型安全的容器对象。2. 自动装箱和拆箱:自动将基本类型的值和对应的包装类对象进行相互转换。3. 增强for循环:简化了对数组和集合的遍历。
2023-08-25

Python3.8 特性介绍

简介海象表达式 :=仅位置参数 /f-strings 说明符 =启动异步 REPLunittest 支持异步简介Python3.8 已经发布了, 官方文档看这里What’s New In Python 3.8.介绍一些 Python3.8
2023-01-31

编程热搜

目录