0

0

React 自动批处理:如何最小化重新渲染并提高性能

心靈之曲

心靈之曲

发布时间:2024-10-24 18:15:21

|

887人浏览过

|

来源于dev.to

转载

react 自动批处理:如何最小化重新渲染并提高性能

在大型 react 应用程序中,浪费的重新渲染可能是一个严重的问题,它会降低性能并使您的应用程序感觉缓慢。在 react 18 中,自动批处理通过减少不必要的重新渲染来帮助优化性能,为开发人员提供更有效的方式来管理状态更新。本指南将引导您了解 react 18 中自动批处理的概念、为什么它对性能如此重要,以及如何在您的应用程序中充分利用它。

简介:大型 react 应用程序中浪费渲染的问题

假设您正在做饭,而不是一次制作所有菜肴,而是不断来回单独制作每道菜 - 显然效率不高,对吧?当状态更新被一一处理时,react 中也会发生同样的事情,导致多次渲染而不是一次渲染。这会导致处理浪费和性能下降,尤其是在大型应用程序中。

在 react 18 之前,同时发生的状态更新通常会导致多次重新渲染。 react 18 通过自动批处理解决了这个问题,它将多个更新分组到一个渲染周期中,从而减少不必要的重新渲染并提高性能。

react 18 中的自动批处理是什么?

看看新功能

自动批处理是react 18中引入的一项功能,它允许react处理同一事件或效果中的多个状态更新,然后仅触发一次重新渲染。这可以最大限度地减少渲染次数并提高应用程序的整体性能。

在 react 18 之前,批处理仅应用于事件处理程序内部。然而,react 18 将批处理扩展到异步函数(如 settimeout、promise 和事件侦听器)中的所有 更新,使其更加强大和全面。

自动配料示例

以下是 react 18 中自动批处理如何工作的示例:

import { usestate } from 'react';

function mycomponent() {
  const [count, setcount] = usestate(0);
  const [text, settext] = usestate('');

  function handleclick() {
    setcount(count + 1);
    settext('updated');
    // both updates are batched, and only one re-render happens
  }

  return (
    

{count}

{text}

); }

在上面的代码中,计数和文本的状态更新被一起批处理,触发一次重新渲染而不是两次。这要归功于 react 18 的自动批处理。

为什么它对性能很重要

它如何减少不必要的重新渲染

在react中,每次状态改变时,都会发生重新渲染。如果您有多个状态更新相继发生,就像在事件处理程序中一样,react 通常会触发多个渲染。这可能会减慢您的应用程序的速度,尤其是在扩展时。

自动批处理将这些状态更新合并到单个渲染通道中。想象一下,如果您正在填写一个包含多个字段的表单,并且每个输入更改都会导致整个表单重新呈现。通过自动批处理,react 一次性处理所有这些更改,使 ui 感觉更流畅、更快。

自动批处理的常见用例

事件处理程序和效果中的状态更新示例

自动批处理适用于多种情况,包括:

Pic Copilot
Pic Copilot

AI时代的顶级电商设计师,轻松打造爆款产品图片

下载
  1. 事件处理程序:react 已经在事件处理程序中批量更新,但现在它可以更好地处理多个更新,而无需不必要的渲染。
   function handlesubmit() {
     setformsubmitted(true);
     setformdata({ ...formdata, submittedat: new date() });
     // only one re-render happens here
   }
  1. 效果和异步函数:使用 react 18,批处理可以在 settimeout 和 promise 等异步代码中无缝运行。
   settimeout(() => {
     setloading(false);
     setuser({ name: 'john' });
     // these state changes are batched, so only one re-render
   }, 1000);

这意味着即使在异步操作中,react 也可以将多个更新组合在一起,从而提高性能并最大限度地减少重新渲染的次数。

使用flushsync进行手动批处理:何时以及为何应使用它

什么是flushsync?

在某些情况下,您可能需要手动控制何时发生状态更新,特别是在处理动画或关键 ui 更新时。这就是 flushsync 发挥作用的地方。它强制 react 立即处理更新,而不是与其他更新一起批处理。

何时使用flushsync

在需要确保状态立即更新并反映在 dom 中的场景中,您应该使用flushsync,而不是等待 react 批量更新。这在时间至关重要的情况下通常是必要的,例如动画或即时视觉反馈。

这是flushsync的工作原理:

import { flushSync } from 'react-dom';

function handleClick() {
  flushSync(() => {
    setCount(count + 1);
  });
  // The DOM is updated immediately after the state change
  console.log('Count updated:', count);
}

在此示例中,react 立即处理 setcount 更新,确保 dom 立即反映更改,这对于时间敏感的操作非常有用。

结论:批处理如何帮助优化现代应用程序中的 react 性能

react 18 的自动批处理是一项改变游戏规则的功能,它通过减少不必要的重新渲染来优化性能,使您的应用程序运行得更快、更流畅。通过将状态更新分组到单个渲染中,react 确保您的应用程序的 ui 即使在扩展时也能保持响应灵敏且高效。

对于大多数用例,自动批处理开箱即用,但如果您需要更多控制,可以使用 flushsync 来实时处理更新。

通过利用这些功能,开发人员现在可以最大程度地减少浪费的渲染并提高 react 应用程序的整体性能,从而确保更好的用户体验。


准备好通过自动批处理来优化您的 react 应用程序了吗?尝试在您的下一个项目中实现此功能,看看它对您应用程序的性能有何提升!


如果您喜欢这篇文章,请考虑支持我的工作:

  • 请我喝杯咖啡
  • 预约电话寻求指导或职业建议
  • 在 twitter 上关注我
  • 在 linkedin 上联系
数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
DOM是什么意思
DOM是什么意思

dom的英文全称是documentobjectmodel,表示文件对象模型,是w3c组织推荐的处理可扩展置标语言的标准编程接口;dom是html文档的内存中对象表示,它提供了使用javascript与网页交互的方式。想了解更多的相关内容,可以阅读本专题下面的文章。

2937

2024.08.14

promise的用法
promise的用法

“promise” 是一种用于处理异步操作的编程概念,它可以用来表示一个异步操作的最终结果。Promise 对象有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。Promise的用法主要包括构造函数、实例方法(then、catch、finally)和状态转换。

298

2023.10.12

html文本框类型介绍
html文本框类型介绍

html文本框类型有单行文本框、密码文本框、数字文本框、日期文本框、时间文本框、文件上传文本框、多行文本框等等。详细介绍:1、单行文本框是最常见的文本框类型,用于接受单行文本输入,用户可以在文本框中输入任意文本,例如用户名、密码、电子邮件地址等;2、密码文本框用于接受密码输入,用户在输入密码时,文本框中的内容会被隐藏,以保护用户的隐私;3、数字文本框等等。

396

2023.10.12

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

36

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

18

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

34

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

16

2026.01.13

PHP缓存策略教程大全
PHP缓存策略教程大全

本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号