当前位置: 首页 > article >正文

memo和useMemo的区别

memouseMemo 是 React 中用于优化性能的两个不同 API,它们有不同的应用场景和用途。下面是它们的区别:

1. memo

  • 作用memo 是一个高阶组件(HOC),用于优化函数组件的渲染,避免不必要的重新渲染。
  • 用法:当一个组件的 props 没有发生变化时,memo 会阻止该组件重新渲染。
  • 适用场景:适用于函数组件,尤其是那些在父组件重新渲染时不需要更新的子组件。
import React, { memo } from 'react';

const MyComponent = ({ name }) => {
  console.log('Component re-rendered');
  return <div>{name}</div>;
};

export default memo(MyComponent); // 使用 memo

工作原理memo 会对传递给组件的 props 进行浅层对比,如果 props 没有变化,就跳过该组件的重新渲染。

总结:
  • memo 是用于避免组件的重复渲染。
  • 用于包装整个组件,依赖 props 变化。

2. useMemo

  • 作用useMemo 是一个 React hook,用于缓存函数的返回值,以避免每次渲染都重复计算开销较大的值。
  • 用法:当计算结果依赖于某些值(通常是 propsstate),但这些值在某些渲染中保持不变时,useMemo 可以缓存该计算结果。
  • 适用场景:适用于在渲染过程中需要执行昂贵计算的场景,如过滤、排序、复杂运算等。
import React, { useMemo } from 'react';

const MyComponent = ({ data }) => {
  const sortedData = useMemo(() => {
    console.log('Sorting data');
    return data.sort(); // 模拟一个耗时的排序操作
  }, [data]);

  return <div>{sortedData.join(', ')}</div>;
};

工作原理useMemo 只有在其依赖项数组([data])中的值发生变化时,才会重新计算缓存的值,否则会返回之前缓存的结果。

总结:
  • useMemo 是用于缓存某个计算结果,避免每次渲染都重复执行这个计算。
  • 它缓存的是一个,而不是整个组件。

总体区别:

  • memo 用于组件的优化,通过对比 props 来决定是否重新渲染组件。
  • useMemo 用于缓存函数的计算结果,避免不必要的重复计算。

简单理解:

  • memo 是用于控制组件的重新渲染。
  • useMemo 是用于缓存复杂计算的结果。

http://www.kler.cn/news/307200.html

相关文章:

  • Js中的pick函数
  • 【Python基础】Python 装饰器(优雅的代码增强工具)
  • 如何通过Chrome浏览器轻松获取视频网站的TS文件
  • 什么是交换机级联?
  • 使用Python生成多种不同类型的Excel图表
  • HTML5元素定位
  • 小米,B站网络安全岗位笔试题目+答案
  • 借老系统重构我准备写个OpenAPI3.1版的API管理工具(附录屏演示)
  • 快手自研Spark向量化引擎正式发布,性能提升200%
  • MySQL基础(11)- 创建管理表
  • bug 记录 - animation 在 IOS机型掉帧情况
  • Web安全之HTTPS调用详解和证书说明案例示范
  • Ubuntu 安装包下载(以20版本 阿里镜像站为例子)
  • 非凸科技钻石赞助第四届Rust China Conf 2024
  • (南京观海微电子)——GH7006+Boe_6.8_AV068WVU-N10原理介绍
  • 数据清洗-缺失值填充-K-NN算法(K-Nearest Neighbors, K-NN算法)
  • STM32与ESP8266的使用
  • SSH工具 MobaXterm的使用与快捷配置
  • 【JS|第27期】网页文件传输:Blob与Base64的对决
  • 优化理论及应用精解【8】
  • 视频生成3D模型luma AI Dashboard
  • shell脚本中sed命令如何使用变量
  • 开发适合el-dialog的拉伸拖拽自定义指令和适配自定义的图片查看组件
  • 从主流技术架构视角剖析 Java Web 项目的性能测试策略与挑战
  • 研1日记13
  • unity3d入门教程六
  • 校验(网络传输)
  • PHP环境搭建
  • 函数模板(初阶)
  • VuePress搭建文档网站/个人博客(详细配置)之站点配置