使用 useMemo 提高 React 组件性能

简介: 使用 useMemo 提高 React 组件性能

1. 前言

  1. 哈哈,这其实是一篇根据 chatGPT的回答 加上我的润色出来的文章

2. 是什么 what

  1. useMemo 是 React 提供的一个用于优化组件性能的工具。
  2. 如果说类组件的性能优化的方法是shouldComponentUpdatePureComponent
  3. 那么给函数组件做性能优化的就是这个useMemo

  1. 在 React 应用中,当一个组件被渲染时,会调用组件内部的各种函数和方法。这些函数和方法可能会执行一些昂贵的计算,比如处理大量数据,进行复杂的计算等等。
    如果这些函数和方法每次渲染组件时都被重新计算,会导致组件的渲染变慢。
  2. 这时就需要用到 useMemo。useMemo 是一个 React 钩子函数,用于在组件渲染期间缓存函数的计算结果,以减少不必要的计算

3. 应用场景

  1. 处理大量数据,进行复杂的计算
  2. 进行 HTTP 请求或者其他 IO 操作
  3. 对一个函数的返回值进行缓存,以减少不必要的计算
  4. 需要注意的是,使用 useMemo 可能会带来额外的开销,因为需要将计算结果缓存起来。因此,在需要进行性能优化时,需要仔细考虑是否需要使用 useMemo。

4. 如何使用 useMemo?

  1. 使用 useMemo 的方法很简单,只需要在组件中引入 useMemo,然后将需要缓存计算结果的函数作为第一个参数传入 useMemo,就可以实现对函数计算结果的缓存
  2. 相关代码

import React, { useState, useMemo, useEffect } from "react";
function App() {
  const [number, setNumber] = useState(0);
  const [text, setText] = useState("");
  const showNum = () => {
    console.log(" render -渲染");
    return "my name is " + number;
  };
  const expensiveComputation = useMemo(() => {
    // 假设这里有一个昂贵的计算
    console.log("进行昂贵的计算...");
    let result = 0;
    for (let i = 0; i < number * 1000000; i++) {
      result += i;
    }
    return result;
  }, [number]);
//  useEffect(()=>{
//   let result = 0;
//     for (let i = 0; i < number * 1000000; i++) {
//       result += i;
//     }
//     setNumber(result)
//  },[number])
  return (
    <div>
      <h1>useMemo 示例</h1>
      <p>计算结果:{number} ---{expensiveComputation} </p>
      <p>{showNum()}</p>
      <button onClick={() => setNumber(number + 1)}>增加数字</button>
      <input type="text" value={text} onChange={(e) => setText(e.target.value)} />
    </div>
  );
}
export default App;

3.上面的代码中,expensiveComputation 是需要缓存的计算结果,

  1. 第一个参数传入的是计算函数,
  2. 第二个参数是一个数组,用于告诉 React 在哪些变量发生变化时需要重新计算计算结果。
  3. 这个数组的作用在于,当其中的变量发生变化时,React 会重新计算计算结果,并将新的计算结果保存到缓存中,当变量未发生变化时,React 会从缓存中读取计算结果,避免了不必要的计算。

5. 总结

  1. 使用 useMemo 是一种简单而有效的性能优化方法,可以帮助我们减少不必要的计算,提高组件的渲染速度,提高 React 应用的整体性能。但是,在使用 useMemo 时,需要仔细考虑是否真的需要对计算结果进行缓存

参考资料


初心

我所有的文章都只是基于入门,初步的了解;是自己的知识体系梳理,如有错误,道友们一起沟通交流;
如果能帮助到有缘人,非常的荣幸,一切为了部落的崛起;
共勉
相关文章
|
29天前
|
前端开发 开发者
React 函数组件与类组件对比
【10月更文挑战第4天】本文详细比较了React中的函数组件与类组件。函数组件是一种简单的组件形式,以纯函数的形式返回JSX,易于理解与维护,适用于简单的UI逻辑。类组件则是基于ES6类实现的,需要重写`render`方法并能利用更多生命周期方法进行状态管理。文章通过示例代码展示了两者在状态管理与生命周期管理上的差异,并讨论了常见的问题如状态更新异步性与生命周期管理的复杂性,最后给出了相应的解决方法。通过学习,开发者可以根据具体需求选择合适的组件类型。
52 8
|
27天前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
139 2
|
2月前
|
前端开发 JavaScript 网络架构
react对antd中Select组件二次封装
本文介绍了如何在React中对Ant Design(antd)的Select组件进行二次封装,包括创建MSelect组件、定义默认属性、渲染Select组件,并展示了如何使用Less进行样式定义和如何在项目中使用封装后的Select组件。
81 2
react对antd中Select组件二次封装
|
7天前
|
前端开发 JavaScript 安全
学习如何为 React 组件编写测试:
学习如何为 React 组件编写测试:
22 2
|
8天前
|
JavaScript 前端开发 算法
在性能上,React和Vue有什么区别
【10月更文挑战第23天】在性能上,React和Vue有什么区别
9 1
|
14天前
|
前端开发 JavaScript 测试技术
React 高阶组件 (HOC) 应用
【10月更文挑战第16天】高阶组件(HOC)是 React 中一种复用组件逻辑的方式,通过接受一个组件并返回新组件来实现。本文介绍了 HOC 的基础概念、核心功能和常见问题,包括静态方法丢失、ref 丢失、多个 HOC 组合和 props 冲突的解决方案,并提供了具体的 React 代码示例。通过本文,读者可以更好地理解和应用 HOC,提高代码的复用性和可维护性。
37 8
|
14天前
|
缓存 前端开发 JavaScript
前端serverless探索之组件单独部署时,利用rxjs实现业务状态与vue-react-angular等框架的响应式状态映射
本文深入探讨了如何将RxJS与Vue、React、Angular三大前端框架进行集成,通过抽象出辅助方法`useRx`和`pushPipe`,实现跨框架的状态管理。具体介绍了各框架的响应式机制,展示了如何将RxJS的Observable对象转化为框架的响应式数据,并通过示例代码演示了使用方法。此外,还讨论了全局状态源与WebComponent的部署优化,以及一些实践中的改进点。这些方法不仅简化了异步编程,还提升了代码的可读性和可维护性。
|
2天前
|
前端开发 UED
React 模态框 Modal 组件详解
【10月更文挑战第27天】本文介绍了如何在 React 中实现一个功能完善的模态框组件。从基础概念入手,逐步讲解了简单的模态框实现、CSS 样式、传递子组件、键盘事件处理等高级功能。同时,还探讨了常见问题及易错点,如背景点击关闭、键盘事件冲突和动画效果。通过本文,读者可以全面了解 React 模态框组件的实现细节。
9 0
|
26天前
|
前端开发 JavaScript 调度
React 组件状态(State)
10月更文挑战第8天
16 1
|
2月前
|
前端开发
React给antd中TreeSelect组件左侧加自定义图标icon
本文介绍了如何在React中为Ant Design的TreeSelect组件的每个树节点添加自定义图标,并解决了因缺少key属性而导致的警告问题,展示了如何通过递归函数处理treeData数据并为每个节点添加图标。
76 2
React给antd中TreeSelect组件左侧加自定义图标icon