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

React18中性能优化方式

一、常规 React 性能优化策略

1. ​​使用 React.memo 避免不必要的重新渲染​​

对纯展示型子组件使用 React.memo,避免父组件更新导致子组件无意义的重渲染。

const MyComponent = React.memo(function MyComponent(props) {/* 使用 props 渲染 */
});

⚠️ 注意:只在 props 真正不变或变化不频繁时使用,避免滥用,因为比较 props 也有开销。

2. ​​合理使用 useMemo 和 useCallback​​

  • ​​useMemo​​:缓存计算结果,避免每次渲染都重新计算。
  • ​​useCallback​​:缓存函数引用,避免子组件因函数引用变化而重渲染。
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
const handleClick = useCallback(() => doSomething(id), [id]);

但不要过早优化,只有在性能确实成为瓶颈时才使用。

3. ​​避免在渲染中直接进行复杂计算或副作用​​

将复杂计算移到 useMemo或事件处理函数中,副作用放到 useEffect中。

4. ​​组件拆分 & 粒度控制​​

将大组件拆分为多个小组件,有助于:

更精确地控制重新渲染范围

提升代码可维护性

结合 React.memo更有效地优化

5、列表渲染优化

正确使用key:确保列表项有稳定唯一的key,避免使用索引作为key

虚拟列表:对于长列表,使用react-window或react-virtualized只渲染可视区域内容

import { FixedSizeList } from 'react-window';const LongList = ({ items }) => (<FixedSizeListheight={500}width="100%"itemCount={items.length}itemSize={50}>{({ index, style }) => (<div style={style} key={items[index].id}>{items[index].content}</div>)}</FixedSizeList>
);

6、资源加载优化

代码分割与懒加载:使用React.lazy和suspense按需加载组件

const HeavyComponent = React.lazy(() => import('./HeavyComponent'));const App = () => (<Suspense fallback={<Spinner />}><HeavyComponent /></Suspense>
);

7、状态管理优化

状态局部化:将状态放在最需要它的组件中,避免状态提升过高

使用useReducer处理复杂状态:减少多个相关状态更新导致的重渲染

http://www.dtcms.com/a/388985.html

相关文章:

  • X133核心板--智能教育平板的芯动力​
  • 下载flink和flink cdc jar
  • 华为三层交换技术
  • 潮起之江:算力创新与赋能开启AI产业新征程
  • 华为链路聚合技术基础
  • 百度智能云车牌识别API官方配置指南
  • Git 拉Github的仓库却要求登录GitLab
  • 【Kafka】Kafka如何开启sasl认证?
  • 国产化Excel开发组件Spire.XLS教程:C# 轻松将 DataSet 导出到 Excel
  • NLP情绪因子解构鲍威尔“风险管理降息”信号,黄金价格在3707高位触发量化抛售潮
  • 【Python办公】Excel多Sheet拆分工具
  • Unity_程序集_.asmdef_引用命名域失败
  • FPGA采集AD7606转SRIO传输,基于Serial Rapidlo Gen2,提供6套工程源码和技术支持
  • Cloudcompare实现在模型上进行点云(下)采样
  • 【Linux】聊聊文件那些事:从空文件占空间到系统调用怎么玩
  • 基于代码层对运动台性能提升实战
  • openfeigin配置相关
  • 网络传输协议解析及SSE补充
  • 视觉SLAM第12讲:建图
  • 2025编程技术学习网站大全:从入门到精通的免费资源指南
  • 刷题日记0918
  • emacs 如何显示断点和运行的行标
  • 【c++】继承(2)
  • 大模型提示词Prompt工程:万能公式-完整指南
  • Flask RESTful API 教程:从零实现 Python CRUD 后端服务
  • 百年奢品家电ASKO亮相IFA2025|以至臻品质绘就生活新境
  • jvm排查full gc或者humongous obj思路?如何调优?
  • 实现.NetCore集成Serilog,写入日志文件,并按日期拆分文件夹
  • [新启航]航空发动机燃烧室喷嘴孔深光学 3D 轮廓测量 - 激光频率梳 3D 轮廓技术
  • iOS 上架 App 流程全解析 苹果应用发布步骤、App Store 审核流程、ipa 文件上传与 uni-app 打包实战经验