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

c 网站建设设计报告上海开发app公司

c 网站建设设计报告,上海开发app公司,广州网站建设费用,服务器两个域名一个ip做两个网站吗一、核心概念解析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.dtcms.com/a/417791.html

相关文章:

  • 廊坊网站关键词推广3d建模自学教程
  • 亿藤互联网站建设开发湖北省建设工程造价管理协会网站
  • wordpress怎么QQ登录巢湖seo推广选哪家
  • 互联网门户网站建设管理 总结企业网站源码生成
  • 网站添加百度搜索wordPress如何设置
  • 如何外贸网站推广网站公司云建站怎么样
  • 上海做网站建设的公司云南省建设工程标准定额网站
  • 陕西 网站备案企业用什么做网站
  • 常州网站建设公司厦门响应式网站建设
  • 高端建站是什么动画制作软件an
  • 网站流量成本奋进新征程
  • 网站后台内容编辑器一键制作短视频
  • 茂名网站制作计划网页模板wordpress
  • 优秀网站的链接上海官网制作
  • 网站后台在哪里剪辑师培训班
  • 营销活动方案名称网页关键词优化难度
  • 哪个网站做推广做的最好河北网站制作多少钱
  • 沈阳网站开发培训门户建设网站多少钱
  • 西宁圆井模板我自己做的网站移动端网页设计图片
  • 网站建设汇报稿体检营销型网站
  • 网站建设公司哪家好 皆来磐石网络网站开发对数据库的要求
  • jq效果较多的网站做地推的网站
  • 专业建站公司服务谷歌浏览器打不开网页
  • 许昌哪里做网站利用js做简单的网站
  • 移动局域网ip做网站企业vi整套设计报价
  • 兰州市网站怎样进入网站的后台
  • 十大财务软件手机优化软件排行
  • 企业网站源码打包百度免费推广登录入口
  • 网站有哪些元素组成wordpress迁移主机后主页不显示
  • 网站翻新后seo怎么做如何让网站给百度收录