react笔记之useMemo

useMemo 是 React 中的一个 Hook,用于缓存(记忆)计算结果,避免在每次组件重新渲染时都重复执行开销较大的计算逻辑。

作用

  • 性能优化 :当某个值的计算成本较高(比如遍历大数组、复杂运算等),且该值只在某些依赖项变化时才需要重新计算,就可以用 useMemo 将其缓存起来。
  • 避免不必要的重复计算:只要依赖项没有变化,就直接返回之前缓存的值。

语法

js 复制代码
const memoizedValue = useMemo(() => {
  // 计算逻辑
  return computedValue;
}, [dependencies]);
  • 第一个参数是一个函数,返回要缓存的值。
  • 第二个参数是一个依赖数组。只有当数组中的某个依赖项发生变化时,才会重新执行计算函数。

举个例子 🌰

假设我们有一个输入框,用户输入一个数字 n,我们要计算从 1 到 n 的所有偶数之和。这个计算如果 n 很大,会比较耗时。

js 复制代码
import React, { useState, useMemo } from 'react';

function ExpensiveComponent() {
  const [count, setCount] = useState(0);
  const [inputValue, setInputValue] = useState('');

  // 模拟一个昂贵的计算:计算 1 到 count 中所有偶数的和
  const expensiveValue = useMemo(() => {
    console.log('正在计算...');
    let sum = 0;
    for (let i = 1; i <= count; i++) {
      if (i % 2 === 0) sum += i;
    }
    return sum;
  }, [count]); // 只有 count 变化时才重新计算

  return (
    <div>
      <p>偶数之和: {expensiveValue}</p>
      <button onClick={() => setCount(c => c + 1)}>增加 count</button>

      {/* 这个输入不会触发 expensiveValue 重新计算 */}
      <input
        value={inputValue}
        onChange={e => setInputValue(e.target.value)}
        placeholder="随便输点啥"
      />
    </div>
  );
}
说明:
  • 当你修改输入框内容(inputValue)时,组件会重新渲染,但由于 useMemo 的依赖项 [count] 没变,所以 不会重新执行计算逻辑console.log('正在计算...') 不会打印。
  • 只有点击按钮改变 count 时,才会重新计算。

注意事项

  • 不要滥用 :如果计算本身不耗时,使用 useMemo 反而会增加内存开销和代码复杂度。
  • useMemo 不能保证 缓存一定有效(React 在内存紧张时可能会丢弃缓存),所以你的代码即使不用 useMemo 也应该能正常工作。
  • useCallback 的区别:useCallback(fn, deps) 相当于 useMemo(() => fn, deps),主要用于缓存函数。
相关推荐
jrlong2 小时前
DataWhale大模型基础与量化微调task4学习笔记(第 1章:参数高效微调_LoRA 方法详解)
笔记·学习
清风细雨_林木木2 小时前
react 中 form表单提示
前端·react.js·前端框架
卡布叻_星星2 小时前
后端笔记之Maven配置以及解决Maven中央仓库没有的依赖
笔记
Jackchenyj2 小时前
基于艾宾浩斯记忆曲线的AI工具实战:ShiflowAI助力高效知识沉淀
人工智能·笔记·信息可视化·智能体
傻小胖2 小时前
5.BTC-实现-北大肖臻老师客堂笔记
笔记·区块链
小二·2 小时前
Python Web 开发进阶实战:边缘智能网关 —— 在 Flask + MicroPython 中构建轻量级 IoT 边缘推理平台
前端·python·flask
TOPGUS2 小时前
解析200万次对话数据:ChatGPT引用内容的核心特征与优化策略
前端·人工智能·搜索引擎·chatgpt·seo·数字营销
羊仔AI探索2 小时前
前端已死,未来已来,谷歌Gemini 3 Pro杀回来了!
前端·人工智能·ai·aigc
快起来搬砖了2 小时前
UniApp/Vue2 通用工具函数库(完整版):覆盖校验、格式、业务全场景
前端·uni-app