【React 钩子函数 useMemo以及useMemo和useEffect的区别】

news/2024/7/15 17:12:46 标签: react.js, 前端, javascript, react

useMemo 是 React 中的一个钩子函数,用于优化组件的性能。它的作用是在渲染过程中缓存计算结果,以避免不必要的计算,从而提高组件的性能。

useMemo 接受两个参数:

  1. 一个函数,该函数返回需要缓存的值。
  2. 一个数组,包含了依赖项。只有当依赖项数组中的值发生变化时,useMemo 才会重新计算缓存的值。

基本的语法如下:

javascript">const memoizedValue = useMemo(() => {
  // 计算和返回需要缓存的值
}, [dependency1, dependency2, ...]);

下面是一个示例,演示了如何使用 useMemo

javascript">import React, { useMemo, useState } from 'react';

function MyComponent({ data }) {
  // 使用 useMemo 缓存计算结果,只有当 data 变化时才重新计算
  const expensiveCalculation = useMemo(() => {
    console.log('Calculating...');
    let result = 0;
    for (let i = 0; i < data.length; i++) {
      result += data[i];
    }
    return result;
  }, [data]);

  return (
    <div>
      <p>Expensive Calculation: {expensiveCalculation}</p>
    </div>
  );
}

function App() {
  const [data, setData] = useState([1, 2, 3, 4, 5]);

  const handleDataChange = () => {
    setData([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
  };

  return (
    <div>
      <button onClick={handleDataChange}>Change Data</button>
      <MyComponent data={data} />
    </div>
  );
}

export default App;

在上面的示例中,MyComponent 组件包含了一个昂贵的计算(计算数组中所有元素的总和)。使用 useMemo,我们可以确保只有当 data 发生变化时才重新计算 expensiveCalculation,从而避免不必要的计算。如果你点击 “Change Data” 按钮,只有在 data 发生变化时才会重新计算,而不是每次重新渲染组件时都计算。这有助于提高性能,特别是当计算较为昂贵时。

useMemouseEffect 都是 React 中的钩子函数,但它们有不同的用途和行为:

  1. useMemo

    • 用途useMemo 用于缓存和计算值,以便在组件重新渲染时减少不必要的计算开销。
    • 语法useMemo 接受一个函数和一个依赖数组作为参数。它会计算并返回一个 memoized(缓存的)值,只有当依赖项数组中的值发生变化时才会重新计算。
    • 示例:常用于计算昂贵的计算或处理数据转换,以确保只在必要时重新计算结果。
  2. useEffect

    • 用途useEffect 用于处理副作用,例如订阅数据、数据获取、DOM 操作等。它允许你在组件渲染后执行操作,并可以处理组件的生命周期。
    • 语法useEffect 接受一个函数和一个依赖数组作为参数。它会在每次组件渲染后执行函数,但可以根据依赖数组的变化来控制何时重新运行。
    • 示例:常用于订阅数据、更新 DOM、发起网络请求、清理资源等操作。

区别总结如下:

  • useMemo 主要用于计算和缓存值,以减少重复计算,它返回一个 memoized 值。
  • useEffect 主要用于处理副作用,例如订阅、数据获取、DOM 操作等,它不返回值,但可以在组件渲染后执行操作。
  • useMemo 的目标是优化性能,减少不必要的计算。useEffect 的目标是处理副作用,管理组件的生命周期。
  • useMemo 的依赖数组用于控制何时重新计算值,而 useEffect 的依赖数组用于控制何时运行副作用函数。

通常情况下,你会选择使用 useMemo 来优化性能,而使用 useEffect 来处理副作用。但具体使用哪个钩子函数取决于你的需求和场景。


http://www.niftyadmin.cn/n/5026456.html

相关文章

node 之 express 框架(初级)

一、express 热更新 1、安装扩展 npm install node-dev -D2、在根目录下的 package.json 文件中进行配置 3、之后的启动执行下面的命令即可 npm run dev二、mvc中的 模板引擎 1、ejs模板引擎的安装 npm install ejs -s2、在根目录下的app.js文件中配置 app.set(view engin…

bootstrap柵格

.col-xs- 超小屏幕 手机 (<768px) .col-sm- 小屏幕 平板 (≥768px) .col-md- 中等屏幕 桌面显示器 (≥992px) .col-lg- 大屏幕 大桌面显示器 (≥1200px) 分为12个格子 -后面的1代表占12分子1也就是一份 1.中等屏幕 <div class"container-fluid a">&l…

【Tricks】关于如何防止edge浏览器偷取chrome浏览器的账号

《关于如何防止edge浏览器偷取chrome浏览器的账号》 前段时间edge自动更新了&#xff0c;我并没有太在意界面的问题。但是由于我使用同一个网站平台时&#xff0c;例如b站&#xff0c;甚至是邮箱&#xff0c;edge的账号和chrome的账号会自动同步&#xff0c;这就导致我很难短时…

安装ThinkPHP5.1并在框架中使用FFmpeg视频处理工具遇到的问题和解决办法

一&#xff1a;安装ThinkPHP5.1框架 问题一&#xff1a; 安装方法有很多&#xff0c;我这里使用composer安装的&#xff0c;但是遇到了问题&#xff0c;出现了报错 安装方法可是查看 https://www.kancloud.cn/manual/thinkphp5_1/353948 composer create-project topthink/th…

(二十九)大数据实战——kafka集群节点服役与退役案例实战

前言 本节内容是关于kafka集群节点的服役与退役&#xff0c;从而实现kafka集群的缩容与扩容。在开始本节内容之前&#xff0c;我们要预先安装好kafka集群&#xff0c;并准备一台空余的服务器用来完成我们扩容与缩容的案例。关于kafka集群的安装内容这里不在赘述&#xff0c;相…

Excel VLOOKUP 初学者教程:通过示例学习

目录 前言 一、VLOOKUP的用法 二、应用VLOOKUP的步骤 三、VLOOKUP用于近似匹配 四、在同一个表里放置不同的VLOOKUP函数 结论 前言 Vlookup&#xff08;V 代表“垂直”&#xff09;是 excel 中的内置函数&#xff0c;允许在 excel 的不同列之间建立关系。 换句话说&#x…

✔ ★ 算法基础笔记(Acwing)(三)—— 搜索与图论(17道题)【java版本】

搜索与图论 1. DFS1. 排列数字(3分钟)2. n-皇后问题 2. BFS&#xff08;队列&#xff09;1. 走迷宫二刷总结&#xff08;队列存储一个节点pair<int,int>&#xff09;三刷总结 走过的点标记上距离(既可以记录距离&#xff0c;也可以判断是否走过) ★ ★ 例题2. 八数码二刷…

使用Jconsole监控JMX

使用Jconsole监控 Jconsole启动 直接本地启动jdk工具 本地连接 本地启动java应用直接点击就可以连接 本地远程连接 idea启动服务连接 配置运行配置 配置远程参数 -Djava.rmi.server.hostname127.0.0.1 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxrem…