网站域名过期了怎么办商城小程序开发
2026/2/18 13:35:15 网站建设 项目流程
网站域名过期了怎么办,商城小程序开发,网站建设痛点,沃尔玛网上商城你在 React 项目开发中#xff0c;是不是遇到过组件无意义重复渲染、复杂计算耗时过长的问题#xff1f;比如父组件仅仅修改自身状态#xff0c;子组件却跟着重新渲染#xff1b;每次渲染都执行复杂的数组过滤、排序#xff0c;导致页面卡顿。React 提供的 memo、useMemo、…你在 React 项目开发中是不是遇到过组件无意义重复渲染、复杂计算耗时过长的问题比如父组件仅仅修改自身状态子组件却跟着重新渲染每次渲染都执行复杂的数组过滤、排序导致页面卡顿。React 提供的 memo、useMemo、useCallback 三个优化工具能精准解决这些性能痛点让组件渲染更高效。本文结合实战代码带你吃透这三个工具的核心用法轻松实现 React 项目性能优化。一、核心认知三个工具的优化定位在使用之前先明确三者的优化场景避免用错地方反而增加代码复杂度memo用于优化函数组件的重复渲染针对「组件本身无变化却因父组件渲染而被迫渲染」的场景相当于类组件的 PureComponent。useMemo用于缓存复杂计算的结果避免每次组件渲染都重复执行耗时计算返回的是「计算结果」。useCallback用于缓存函数的引用避免每次组件渲染都创建新的函数实例返回的是「函数本身」。三者的核心共性通过缓存减少不必要的计算和渲染提升组件执行效率。二、实战一memo 优化组件重复渲染memo 是一个高阶组件接收一个函数组件作为参数返回一个优化后的组件。它会浅比较组件的 props只有当 props 发生变化时组件才会重新渲染。1. 未优化的问题示例父组件修改自身状态子组件无 props 变化却跟着重复渲染import React, { useState } from react; // 子组件无 props 依赖却会随父组件渲染而重复渲染 function ChildComponent() { console.log(子组件无意义重复渲染了); return div style{{ marginTop: 20px }}我是子组件无 props 传入/div; } // 父组件 function ParentComponent() { const [count, setCount] useState(0); return ( div style{{ padding: 20px, border: 1px solid #eee, borderRadius: 8px }} h3父组件计数器{count}/h3 button onClick{() setCount(count 1)}点击1/button ChildComponent / /div ); } export default ParentComponent;2. 使用 memo 优化后的示例import React, { useState, memo } from react; // 优化用 memo 包裹子组件避免无意义重复渲染 const ChildComponent memo(() { console.log(子组件只有 props 变化才会渲染); return div style{{ marginTop: 20px }}我是子组件无 props 传入/div; }); // 父组件代码不变 function ParentComponent() { const [count, setCount] useState(0); return ( div style{{ padding: 20px, border: 1px solid #eee, borderRadius: 8px }} h3父组件计数器{count}/h3 button onClick{() setCount(count 1)}点击1/button ChildComponent / /div ); } export default ParentComponent;3. memo 核心说明memo 仅做「浅比较」如果 props 是对象/数组类型仅比较引用地址不深入比较内部属性若需深比较可传递第二个参数自定义比较函数但不推荐深比较本身会消耗性能memo 仅优化子组件因父组件渲染导致的无意义渲染若组件自身状态变化仍会正常渲染。三、实战二useCallback 缓存函数引用当父组件向子组件传递函数 props 时每次父组件渲染都会创建新的函数实例导致子组件的 props 引用变化即使使用 memo 也无法阻止子组件重复渲染。此时需要 useCallback 缓存函数引用。优化示例import React, { useState, memo, useCallback } from react; // 子组件接收函数 props const ChildComponent memo(({ onHandleClick }) { console.log(子组件函数 props 引用未变化不渲染); return button onClick{onHandleClick} style{{ marginTop: 10px }}子组件按钮/button; }); // 父组件 function ParentComponent() { const [count, setCount] useState(0); // 优化用 useCallback 缓存函数仅当依赖变化时才创建新函数 const handleChildClick useCallback(() { console.log(子组件按钮被点击); }, []); // 空依赖函数引用永久缓存除非组件卸载 return ( div style{{ padding: 20px, border: 1px solid #eee, borderRadius: 8px }} h3父组件计数器{count}/h3 button onClick{() setCount(count 1)}点击1/button ChildComponent onHandleClick{handleChildClick} / /div ); } export default ParentComponent;useCallback 核心说明useCallback 接收两个参数需要缓存的函数、依赖数组只有当依赖数组中的变量发生变化时才会创建新的函数实例否则返回缓存的函数引用通常与 memo 配合使用单独使用 useCallback 无优化意义。四、实战三useMemo 缓存复杂计算结果当组件中存在复杂计算如大数据数组排序、过滤、数学运算时每次组件渲染都会重复执行这些计算消耗大量性能。useMemo 可以缓存计算结果仅当依赖变化时才重新计算。优化示例import React, { useState, useMemo } from react; // 模拟复杂计算大数据数组过滤与排序 function complexCalculation(list) { console.log(执行复杂计算...); return list.filter(item item 50).sort((a, b) b - a); } function CalculationDemo() { const [count, setCount] useState(0); // 模拟大数据数组 const numberList [12, 67, 89, 34, 90, 56, 78, 23]; // 优化用 useMemo 缓存计算结果仅当 numberList 变化时才重新计算 const resultList useMemo(() { return complexCalculation(numberList); }, [numberList]); // 依赖仅 numberList 变化时重新计算 return ( div style{{ padding: 20px, border: 1px solid #eee, borderRadius: 8px }} h3父组件计数器{count}/h3 button onClick{() setCount(count 1)}点击1/button div style{{ marginTop: 20px }} h4复杂计算结果大于50的数降序排列/h4 p{resultList.join(, )}/p /div /div ); } export default CalculationDemo;useMemo 核心说明useMemo 接收两个参数计算函数、依赖数组计算函数的返回值即为缓存结果组件渲染时若依赖未变化直接返回缓存结果不执行计算函数避免用 useMemo 缓存简单计算如 count 1缓存本身也有开销反而得不偿失useMemo 还能用于避免传递给子组件的对象/数组 props 引用频繁变化配合 memo 使用。五、避坑指南与最佳实践避免过度优化只有当组件出现明显性能问题如卡顿、重复渲染频繁时才使用这三个工具不要一上来就无脑优化增加代码复杂度。依赖数组不要遗漏useCallback 和 useMemo 的依赖数组必须包含所有在内部使用的组件变量否则会获取到旧值导致逻辑异常。memo 不解决深比较问题若子组件 props 是复杂对象不要依赖 memo 阻止渲染优先简化 props或使用不可变数据如 Immer。useMemo 与 useCallback 区分使用需要缓存「计算结果」用 useMemo需要缓存「函数引用」用 useCallback不要混淆。避免在 useMemo/useCallback 中执行副作用副作用逻辑应放在 useEffect 中这两个工具仅用于缓存执行副作用会导致不可预期的问题。六、总结React 中 memo、useMemo、useCallback 的核心价值在于「减少不必要的渲染和计算提升组件性能」核心要点可概括为memo优化函数组件重复渲染浅比较 props仅当 props 变化时才渲染。useCallback缓存函数引用配合 memo 避免子组件因函数 props 引用变化而重复渲染。useMemo缓存复杂计算结果仅当依赖变化时才重新计算提升渲染效率。避坑关键不过度优化、不遗漏依赖、区分使用场景、不执行副作用。核心原则性能优化以「解决实际问题」为前提优先保证代码可读性再进行针对性优化。掌握这三个工具的用法你可以轻松解决 React 项目中的常见性能问题让组件渲染更高效为用户带来更流畅的使用体验。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询