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


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

    useMemo 接受两个参数:

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

    基本的语法如下:

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

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

    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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    在上面的示例中,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 来处理副作用。但具体使用哪个钩子函数取决于你的需求和场景。

  • 相关阅读:
    【Unity入门计划】2D游戏中遮挡问题的处理方法&伪透视
    一、了解 Servlet 及 Servlet 容器
    青年领袖分论坛精彩回顾 | 第二届始祖数字化可持续发展峰会
    Docker配置Nginx、tomcat、elasticsearch
    虹科 | 解决方案 | 新能源车EV测试解决方案
    新增Node.js运行环境、新增系统缓存清理功能,1Panel开源面板v1.7.0发布
    线段树基本操作——建树+单点修改+区间查询
    图像运算和图像增强十一
    Redis安装及使用(Windows&&Linux)
    算法入门01二维数组中的查找
  • 原文地址:https://blog.csdn.net/z2000ky/article/details/132773148