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

做网站怎么写预算上海网站建设企业

做网站怎么写预算,上海网站建设企业,wordpress获取菜单,网站详情页链接怎么做React useMemo 和 useCallback 性能优化总结以及使用场景 基本概念 useMemo 用于缓存计算结果,避免在每次渲染时重复进行昂贵的计算。 useCallback 用于缓存函数引用,避免在每次渲染时创建新的函数引用。 使用时机对比 useMemo 适用场景 复杂计算…

React useMemo 和 useCallback 性能优化总结以及使用场景

基本概念

useMemo

用于缓存计算结果,避免在每次渲染时重复进行昂贵的计算。

useCallback

用于缓存函数引用,避免在每次渲染时创建新的函数引用。

使用时机对比

useMemo 适用场景

  1. 复杂计算
function DataGrid({ items, filter }) {// 适用:复杂的数据处理const filteredItems = useMemo(() => {return items.filter(item => {return complexFilterLogic(item, filter);});}, [items, filter]);return <div>{filteredItems.map(item => <Item key={item.id} {...item} />)}</div>;
}
  1. 避免重复创建大对象
function ChartComponent({ data }) {// 适用:大数据结构转换const chartConfig = useMemo(() => ({data: transformData(data),options: {// 复杂的配置对象animations: { ... },scales: { ... },plugins: { ... }}}), [data]);return <Chart config={chartConfig} />;
}
  1. 引用相等性重要的场景
function ParentComponent() {// 适用:作为 props 传递的对象const memoizedValue = useMemo(() => ({id: 'unique',data: expensiveComputation()}), []);return <ChildComponent config={memoizedValue} />;
}

useCallback 适用场景

  1. 传递给子组件的回调函数
function ParentComponent() {const [items, setItems] = useState([]);// 适用:传递给子组件的事件处理函数const handleDelete = useCallback((id: string) => {setItems(prev => prev.filter(item => item.id !== id));}, []); // 依赖为空因为不依赖任何外部变量return <ItemList items={items} onDelete={handleDelete} />;
}
  1. 自定义 Hook 中返回的函数
function useSearch(initialQuery: string) {const [query, setQuery] = useState(initialQuery);// 适用:Hook 返回的函数const search = useCallback(async () => {const results = await api.search(query);return results;}, [query]);return { search, query, setQuery };
}
  1. 依赖于 props 或状态的事件处理
function UserActions({ userId, onSuccess }) {// 适用:依赖外部变量的回调const handleUpdate = useCallback(async (data) => {await api.updateUser(userId, data);onSuccess();}, [userId, onSuccess]);return <UserForm onSubmit={handleUpdate} />;
}

不需要使用的场景

不需要 useMemo

  1. 简单的计算
// ❌ 过度优化
const fullName = useMemo(() => firstName + ' ' + lastName, [firstName, lastName]
);// ✅ 直接计算
const fullName = firstName + ' ' + lastName;
  1. 基本类型值
// ❌ 不必要
const count = useMemo(() => items.length, [items]);// ✅ 直接使用
const count = items.length;

不需要 useCallback

  1. 组件内部使用的函数
// ❌ 不必要
const handleClick = useCallback(() => {console.log('clicked');
}, []);// ✅ 直接定义
const handleClick = () => {console.log('clicked');
};
  1. 不会作为 props 传递的函数
// ❌ 过度优化
const formatDate = useCallback((date) => {return new Date(date).toLocaleDateString();
}, []);// ✅ 直接定义或移到组件外
const formatDate = (date) => {return new Date(date).toLocaleDateString();
};

最佳实践

  1. 合理使用依赖数组
function SearchComponent({ onSearch }) {const [query, setQuery] = useState('');const handleSearch = useCallback(() => {onSearch(query);}, [query, onSearch]); // 包含所有依赖项
}
  1. 配合 React.memo 使用
const MemoizedChild = React.memo(function Child({ onAction }) {return <button onClick={onAction}>Click me</button>;
});function Parent() {const handleAction = useCallback(() => {// 处理逻辑}, []); // 空依赖数组确保函数引用稳定return <MemoizedChild onAction={handleAction} />;
}
  1. 避免过度优化
function App() {// 只在真正需要的地方使用const expensiveValue = useMemo(() => veryExpensiveOperation(), [/* 相关依赖 */]);const criticalCallback = useCallback(() => importantOperation(), [/* 相关依赖 */]);
}

性能考虑

  1. 监控性能影响
  • 使用 React DevTools Profiler
  • 测量实际性能提升
  • 只在有明显收益时使用
  1. 权衡成本
  • 考虑内存使用
  • 评估缓存开销
  • 注意依赖数组的大小
  1. 优化策略
  • 优先考虑架构优化
  • 合理拆分组件
  • 使用适当的数据结构
http://www.yayakq.cn/news/12929/

相关文章:

  • 做旅行的网站南通建设厅网站
  • 深圳建设局网站首页app官网
  • 上海网站建设报价表wordpress修改网站地址
  • 南乐网站建设费用国外网站搜索引擎优化方案
  • 网站建设合同需要缴纳印花税软件开发与程序设计有什么不同
  • 海门市住房和城乡建设局网站加强协会网站建设意义
  • 谁有人和兽做的网站哈尔滨市建设网站
  • 海洋网站建设权威的大连网站建设
  • 服务器网站备案joomla与wordpress学哪个好
  • 西安网站建设eliwe苏州推荐网络公司建网站
  • 企业对比网站微盟小程序商城
  • 云南品牌网站开发广东省白云区属于哪个市
  • 自己可以做公司网站吗优化网站排名推荐公司
  • php网站开发师条件什么软件推广效果好
  • 邢台专业做网站费用珠海网站建设哪家权威
  • 建筑类电商网站介绍网站建设规划书结构
  • 网站开发职务苏州哪里做网站好
  • 包装材料东莞网站建设var_dump调试wordpress
  • 蓝色网站素材烘焙食品网站建设需求分析
  • 中国建设银行网站 个人做网站着用什么软件
  • 成都企业网站建设方案西安建设工程交易中心网站
  • js 网站头部固定推广普通话作文
  • 网站建设费 科研 设备费重庆九龙坡营销型网站建设公司哪家好
  • wordpress 非插件七牛cdn全站加速合肥专业做网站的公司
  • 网站建设公司(推荐乐云践新)网站建设百度索引
  • 高端学校网站建设做废钢铁生意在哪个网站了解
  • 文档阅读网站模板下载网站经营性备案条件
  • 阿里云网站备案好了 怎么建站电子商城网站建议书
  • 公司和个人均不能备案论坛类网站长沙专门做网站公司有哪些
  • 建站网站设计西安网站建设设计