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

特色美食网站建设百度一下你就知道原版

特色美食网站建设,百度一下你就知道原版,昆山高端网站建设公司哪家好,常州网络推广公司哪家好一、核心概念解析API类型作用返回值useCallbackReact Hook缓存函数引用记忆化的函数useMemoReact Hook缓存计算结果记忆化的值React.memo高阶组件(HOC)缓存组件渲染结果优化后的组件二、详细说明与代码示例 1、useCallback: 缓存函数引用 con…

一、核心概念解析

API类型作用返回值
useCallbackReact Hook缓存函数引用记忆化的函数
useMemoReact Hook缓存计算结果记忆化的值
React.memo高阶组件(HOC)缓存组件渲染结果优化后的组件

二、详细说明与代码示例

1、useCallback: 缓存函数引用

const memoizedFn = useCallback(() => {// 函数逻辑
}, [dependencies]);
  • 解决的问题: 防止函数引用频繁变化导致子组件无效重渲染
  • 典型场景:
    • 函数作为 props 传递给优化过的子组件(React.memo
    • 函数作为其他 Hook 的依赖项(如useEffect
// 父组件
function Parent() {const [count, setCount] = useState(0);// ✅ 缓存函数引用const increment = useCallback(() => setCount(c => c + 1), []);return <Child onIncrement={increment} />;
}// 子组件(使用 React.memo 优化)
const Child = React.memo(({ onIncrement }) => {console.log('子组件渲染');return <button onClick={onIncrement}>+</button>;
});

2、useMemo:缓存计算结果

const memoizedValue = useMemo(() => {// 复杂计算return computeExpensiveValue(a, b);
}, [a, b]);
  • 解决的问题: 避免重复执行昂贵的计算
  • 典型场景:
    • 复杂计算(如数据转换、筛选)
    • 保持对象/数组引用稳定(避免作为props传递时触发重渲染)
function Component({ items }) {// ✅ 缓存计算结果const filteredItems = useMemo(() => {return items.filter(item => item.value > 100);}, [items]);return <List items={filteredItems} />;
}

React.memo: 缓存组件渲染

const MemoizedComponent = React.memo(Component, arePropsEqual?);
  • 解决的问题: 避免父组件更新导致子组件不必要的重渲染
  • 工作方式:
    • 对props进行浅比较(可自定义比较函数)
    • props未变化时复用上次渲染结果
// 基础用法
const UserCard = React.memo(({ user }) => {return <div>{user.name}</div>;
});// 自定义比较函数
const UserCard = React.memo(({ user }) => {...},(prevProps, nextProps) => prevProps.user.id === nextProps.user.id
);

三、三者区别对比

特性useCallbackuseMemoReact.memo
优化目标函数引用计算结果组件渲染
返回内容函数任何值组件
触发条件依赖变化时重建函数依赖变化时重新计算props变化时重渲染
内存开销缓存函数缓存值缓存虚拟DOM
典型使用位置组件内部组件内部组件导出时
性能影响减少子组件重渲染减少计算开销减少DOM操作

四、协同工作示例

import React, {useState, useCallback, useMemo} from 'react';// 使用React.memo优化的子组件
const Chart = React.memo((data, onClick) => {console.log('渲染');return <svg onClick={onClick}>...</svg>;
})function Dashboard() {const [data, setData] = useState([]);const [filter, setFilter] = useState('month');// ✅ 缓存函数引用const handleClick = useCallback(() => {console.log('图表点击');}, []);//✅ 缓存计算结果const filteredData = useMemo(() => {return data.filter(d => d.period === filter);}, [data, filter]);return (<div><Chartdata={filteredData}  // 稳定引用onClick={handleClick}  // 稳定引用/></div>);
}

优化效果:
1、filter变化 → filteredData重新计算 → Chart重渲染
2、父组件状态更新 → handleClick引用不变 → Chart 不重渲染
3、点击图表 → 触发缓存的handleClick

五、使用误区与最佳实践

常见错误:

// ❌ 错误1:缺少依赖项
const badCallback = useCallback(() => {console.log(count);  // 永远输出初始值
}, []);  // 缺少count 依赖// ❌ 错误2:滥用useMemo
const simpleValue = useMemo(() => 42, []);  // 直接使用 const 更高效// ❌ 错误3:期待 React.memo 深比较
React.memo(Comonent);  // 默认只做浅比较

黄金法则:
1、按需优化: 先用常规写法,出现性能问题再优化
2、组合使用:
- React.memo + useCallback 优化组件树
- useMemo + useCallback 稳定复杂依赖
3、依赖诚实: 始终声明所有依赖项
4、避免深比较: 复杂对象考虑使用ID比对而非完整对象

六、性能影响分析

操作内存开销CPU开销适用场景
使用useCallback缓存函数依赖比较函数传递/依赖项稳定化
使用useMemo缓存值依赖比较 + 计算昂贵计算/引用稳定化
使用React.memo缓存VDOMProps比较重渲染成本高的叶子组件
三者组合较高大型组件/频繁更新场景
不使用优化简单组件/无性能瓶颈

经验总结: 在10%需要优化的关键路径上使用这些API,避免在简单组件中过度优化。

http://www.laogonggong.com/news/435.html

相关文章:

  • 福州网站建设精英新手如何自己做网站
  • 一条龙网站建设哪家好东莞网站建设方案外包
  • 代搭建网站成都多享网站建设公司
  • 鄂州市建设局网站关键时刻
  • 网站开发和移动开发宁波网站推广营销
  • 网络营销公司注册找哪家官网整站优化
  • 珠海网站优化公司怎么在百度打广告
  • 做网站需要投入多少钱百度信息
  • 企业网站维护存在问题网站推广优化技巧
  • 佛山网站建设公司百度 营销推广多少钱
  • 免费移动网站模板下载湘潭seo培训
  • 百度地图网站后台更新怎样做电商 入手
  • 南昌网站免费制作深圳高端seo公司助力企业
  • 导航网站模板免费自媒体营销方式有哪些
  • 外贸五金网站建设广州百度首页优化
  • 深州市住房保障和城乡建设局网站武汉seo优化顾问
  • 重庆网站建设 快速建站如何在百度上做产品推广
  • 网站建设客户问到的问题网站的seo方案
  • 商业招商网站网络推广seo怎么做
  • 手机网站开发注意的问题百度seo关键词优化市场
  • 做互联网产品和运营必备的网站百度官网进入
  • 淮安哪个做网站好点seo发展前景怎么样啊
  • 中小企业网站制作百度快速排名点击器
  • 网页设计大赛新闻稿青岛百度快速优化排名
  • 个人博客网站制作搭建网络营销电子版教材
  • 网站 备案 哪个省网络营销swot分析
  • 做网站大家都找谁怎么创建网站平台
  • 做文案用什么网站淄博seo
  • 做网站是要云空间吗免费的网站关键词查询工具
  • cn域名的网站seo宣传网站