前言:

        在项目中开发中,性能优化是很重要的,react有提供专门的hook,useMemo useCallback 这里说一说他们。

区别:

特性useMemouseCallback
返回值缓存一个 (计算结果)缓存一个 函数
依赖变化时重新计算值重新创建函数
典型用途避免昂贵计算重复执行避免子组件因函数引用变化重渲染
语法useMemo(() => value, deps)useCallback(() => fn, deps)

useMemo 的适用场景

  1. 昂贵计算缓存
    当组件中有需要复杂计算的值(如过滤列表、数学运算等),可以用 useMemo 避免每次渲染重复计算。

    jsx

    const filteredList = useMemo(() => {return largeList.filter(item => item.price > 100);
    }, [largeList]);

  2. 避免不必要的对象/数组重新创建
    如果传递给子组件的 props 是对象或数组,且依赖项未变化时,用 useMemo 缓存它们。

    jsx

    const config = useMemo(() => ({ color: 'red', size: 10 }), []);
    return <ChildComponent config={config} />;


useCallback 的适用场景

  1. 防止子组件无效重渲染
    当父组件传递一个函数给子组件(尤其是 React.memo 优化的子组件)时,用 useCallback 缓存函数,避免因父组件重渲染导致函数引用变化,触发子组件更新。

    jsx

    const handleClick = useCallback(() => {console.log('Clicked!');
    }, []);return <MemoizedChild onClick={handleClick} />;

总结:

  • useMemo → 缓存 (计算结果、对象/数组)。

  • useCallback → 缓存 函数(避免子组件重渲染、稳定依赖项)。

简结

  • 需要缓存函数?用 useCallback

  • 需要缓存其他值?用 useMemo

实际项目使用场景:

1、封装redux的user.ts中
import { UserInfo } from "@/types";
import { useCallback } from "react";
import { useDispatch, useSelector } from "react-redux";
import { setUserInfoAction, clearUser } from "../action";
import { getStateUser } from "../getter";export const useStateUserInfo = () => useSelector(getStateUser)export function useDispatchUser() {const dispatch = useDispatch()const stateSetUser = useCallback((info: UserInfo) => dispatch(setUserInfoAction(info)), [dispatch])const stateClearUser = useCallback(() => dispatch(clearUser()), [dispatch])return { stateSetUser, stateClearUser }
}
2、封装路由跳转的地方,router.tsx
import { useEffect, useMemo, useState } from "react";
import { Routes, Route } from "react-router-dom";....const routerBody = useMemo(() => {// 监听 本地路由列表   同时存在长度大于1时 渲染路由组件if (mergeRouterList.length) {const data = mergeRouterList.map((item) => {let { [MENU_KEY]: key, [MENU_PATH]: path } = item;return (<Routekey={key}path={path.replace("/", "")}element={<Intercept{...item}menuList={ajaxUserMenuList}pageKey={key}/>}/>);});return <Routes>{data}</Routes>}return null}, [ajaxUserMenuList, mergeRouterList])return routerBody;
...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/93456.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/93456.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/93456.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker(springcloud笔记第三期)

p.s.这是萌新自己自学总结的笔记&#xff0c;如果想学习得更透彻的话还是请去看大佬的讲解 目录镜像与容器一些命令与镜像命名规范数据卷自定义镜像Dockerfile镜像与容器 当我们利用Docker安装应用时&#xff0c;Docker会自动搜索并下载应用镜像(image),镜像不仅包含应用本身&…

MySQL定时任务详解 - Event Scheduler 事件调度器从基础到实战

&#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Micro麦可乐的博客 &#x1f425;《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程&#xff0c;入门到实战 &#x1f33a;《RabbitMQ》…

redis存储原理与对象模型

redis中的不同线程 redis单线程是指什么&#xff1f; redis的所有命令处理都在同一个线程中完成 redis为什么采用单线程&#xff1f; redis中存在多种数据结构存储value&#xff0c;如果采用多线程&#xff0c;加锁会很复杂、加锁力度不阿红控制&#xff0c;同时&#xff0c…

基于微信小程序的家教服务平台的设计与实现/基于asp.net/c#的家教服务平台/基于asp.net/c#的家教管理系统

基于微信小程序的家教服务平台的设计与实现/基于asp.net/c#的家教服务平台/基于asp.net/c#的家教管理系统

安全审计-iptales防火墙设置

文章目录一、iptales防火墙设置1.ip规则设置2.ip端口规则设置3.删除规则4.INPUT默认设置5.ping、本地访问规则6.保存还原规则7.查看清除规则一、iptales防火墙设置 1.ip规则设置 #允许ip访问本服务器 iptables -I INPUT -s 192.168.205.129 -p tcp -j ACCEPT#允许某IP或某网段…

Linux小白加油站,第二周

1.grep命令中哪个选项可以忽略大小写进行搜索?grep -i 2.如何用grep命令查找包含”error关键字的日志文件并返回文件名?grep -lr3.解释grep命令中^f...d$这个表达式的含义^f&#xff1a;以f开头..&#xff1a;任意两个字符d$&#xff1a;以d结尾4.如何过滤掉文件中的注释行以…

【前端基础】19、CSS的flex布局

一、FlexBox概念 FlexBox翻译为弹性盒子。 弹性盒子是一种用于按行或按列布局元素的一维布局方式。元素可以膨胀以填充额外的空间&#xff0c;收缩以适应更小的空间。我们使用FlexBox来进行布局的方案称为flex布局。二、flex布局的重要概念 两个重要的概念 开启flex布局的元素叫…

Effective C++ 条款46:需要类型转换时请为模板定义非成员函数

Effective C 条款46&#xff1a;需要类型转换时请为模板定义非成员函数核心思想&#xff1a;当模板类需要支持隐式类型转换时&#xff0c;应将非成员函数声明为友元并定义在类内部&#xff08;或通过辅助函数实现&#xff09;&#xff0c;以绕过模板参数推导的限制&#xff0c;…

用Python对机器学习数据进行缩放

许多机器学习算法期望数据被一致地缩放。 在为机器学习扩展数据时&#xff0c;你应该考虑两种常用的方法。 在这个教程中&#xff0c;您将了解如何为机器学习重新缩放您的数据。阅读完这个教程后&#xff0c;您将知道&#xff1a; 如何从头开始对您的数据进行标准化。如何从…

Application-properties 配置大全

SpringBoot - application.properties 配置大全 SpringBoot项目最重要也是最核心的配置文件就是application.properties&#xff0c;所有的框架配置都需要在这个配置文件中说明&#xff0c;以下配置不会的可以进行查阅并修改 &#xff03;SPRING CONFIG&#xff08;ConfigFileA…

MXFP4量化:如何在80GB GPU上运行1200亿参数的GPT-OSS模型

大型语言模型&#xff08;Large Language Models, LLMs&#xff09;如GPT-OSS、GPT-4、LLaMA和Mixtral的快速发展显著提升了人工智能的能力边界&#xff0c;但同时也带来了严峻的内存资源挑战。以1200亿参数的模型为例&#xff0c;在FP16精度下仅权重存储就需要约240GB的内存空…

Unity进阶--C#补充知识点--【Unity跨平台的原理】了解.Net

来源于唐老狮的视频教学&#xff0c;仅作记录和感悟记录&#xff0c;方便日后复习或者查找一.什么是.Net.Net是指微软一整套技术体系的统称与代号包含的内容有&#xff1a;框架体系&#xff1a;.Net Frameword&#xff0c; .Net Core&#xff0c; Mono开发语言&#xff1a;C#&a…

论文浅尝 | 提高大型语言模型的数学推理能力的学习定理基本原理(AAAI2025)

笔记整理&#xff1a;兰雅榕&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱、大语言模型论文链接&#xff1a;https://ojs.aaai.org/index.php/AAAI/article/view/33662发表会议&#xff1a;AAAI 20251. 动机提高开源大型语言模型&#xff08;LLM&#xff09;的数学…

母猪姿态转换行为识别:计算机视觉与行为识别模型调优指南

母猪姿态转换行为识别&#xff1a;计算机视觉与行为识别模型调优指南 1. 引言 1.1 研究背景与意义 母猪姿态转换行为识别是智能养殖领域的重要研究方向&#xff0c;通过计算机视觉技术自动识别母猪的站立、躺卧、行走等姿态变化&#xff0c;对于监测母猪健康状态、评估福利水平…

K8S集群环境搭建(一)

虚拟机镜像 ubuntu 24 虚拟机网络 虚拟网络–配置 nat模式主机ip配置宿主机ip配置 10.0.0.12 master 2c 10.0.0.15 node1 10.0.0.16 node2 10.0.0.17 node3 10.0.0.20 registersudo vi /etc/netplan/00-installer-config.yaml # 替换为实际文件名 sudo netplan applynetwork:v…

css预编译器实现星空背景图

打造梦幻星空背景&#xff1a;用CSS预处理器轻松实现动态效果 星空背景能为网页增添神秘感和视觉吸引力。通过CSS预处理器&#xff08;如Sass/Less&#xff09;可以高效实现可定制化的星空效果&#xff0c;避免重复编写纯CSS代码。以下是 Vue3 组件皮肤具体实现方法和代码示例。…

焊接机器人保护气体效率优化

在现代工业制造领域&#xff0c;焊接机器人的应用日益广泛&#xff0c;而保护气体在焊接过程中起着至关重要的作用。如何优化保护气体的效率&#xff0c;成为焊接技术发展的一个关键考量因素。WGFACS节气装置的出现&#xff0c;为焊接机器人在保护气体效率优化方面带来了显著的…

Portkey-AI gateway 的一次“假压缩头”翻车的完整排障记:由 httpx 解压异常引发的根因分析

笔者最近在本地搭建了Portkey AI Gateway&#xff08;模型路由网关&#xff09;&#xff0c;然后按照文档中的方式进行测试。结果发现&#xff0c;网关能够接收到请求&#xff0c;但是Python测试的程序却运行报错。Python代码报错信息如下&#xff1a; Traceback (most recent …

什么是Session? PHP编程中Session用法详解

一、Session的基本概念 Session 是 Web 开发中用于在服务器端存储用户临时数据的一种机制&#xff0c;它允许服务器在不同的 HTTP 请求之间识别和跟踪特定用户的状态&#xff0c;本质上是‌服务器为每个用户开辟的临时私有存储空间‌。由于 HTTP 协议本身是无状态的&#xff…

【大模型】AI平台 joyagent 2.0 的部署与测试

github链接&#xff1a;https://github.com/jd-opensource/joyagent-jdgenie 本篇博客记录下自己在配置joyagent的过程&#xff0c;以【手动初始化环境&#xff0c;启动服务】为例&#xff0c;后端调用的deepseek-chat大模型。 前言 JoyAgent是由京东云开源的企业级多智能体系统…