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

react 性能优化的方案

React 的性能优化有非常多成熟的方案

一、组件层级的性能优化

1. 使用 React.memo(函数组件)

避免父组件渲染时导致子组件无意义渲染。

const Child = React.memo(function Child(props) {return <div>{props.value}</div>;
});

适用:

  • props 不变时避免重复渲染

  • PureComponent 的函数组件版

2. 使用 shouldComponentUpdate(类组件)

优化类组件:

shouldComponentUpdate(nextProps, nextState) {return nextProps.value !== this.props.value;
}
3. 使用 useCallback / useMemo 缓存函数和变量

避免每次 render 都创建新对象或新函数:

const handleClick = useCallback(() => {doSomething();
}, []);const expensiveValue = useMemo(() => heavyCompute(data), [data]);
4. 避免在 render 中创建对象 / 函数 / 数组

不推荐:

<Component style={{ color: 'red' }} />

推荐:

const style = { color: 'red' };
<Component style={style} />

二、渲染相关的优化

5. 合理分割组件(粒度越细越能减少渲染)

减少无关组件刷新,如:

  • 表格中每一行都是一个组件

  • 表单中的每个字段独立组件

6. 懒加载 (React.lazy + Suspense)

按需加载组件可减少初次加载时间:

const SomePage = React.lazy(() => import('./SomePage'));
7. 使用 key 优化列表渲染

确保 key 唯一且稳定,避免 diff 失败导致重渲染。

推荐:

id, uuid

不要用:

index

三、状态管理层级优化

8. 减少全局状态;保持状态尽可能本地化

不要把所有数据放到 Redux、MobX、Context

组件自己的状态放 useState

状态越靠上 → 重渲染越多。

9. 避免 Context 大范围使用

Context 变化会让所有消费者重新渲染。
优化方式:

  • 基于 selector 的 use-context-selector

  • 将 context 拆分更细

  • 使用 Zustand / Jotai / Recoil 等更高效的状态库

10. Redux 优化
  • 使用 reselect 缓存计算结果

  • 使用 useSelector 时拆分 selector

  • 使用 RTK(Redux Toolkit)减少不可预期行为

四、渲染内容优化(最重要的两类)

11. 大量数据渲染 → 虚拟列表(Virtualized List)

如:

  • react-window

  • react-virtualized

适用:
表格、聊天、长列表等上万行数据。

12. 大组件首次加载很慢 → 分包 + 懒加载

使用:

  • React.lazy

  • dynamic import

  • Webpack splitChunks

也可用:

  • 路由懒加载

  • 分模块打包

五、数据请求层优化

13. 避免重复请求(使用缓存)

库推荐:

  • SWR

  • React Query

支持自动缓存、重新加载、去重等功能。

14. 使用节流/防抖

搜索、滚动监听、表单输入等场景可以减少触发频率。

六、DOM 和浏览器层面优化

15. 使用 requestAnimationFrame 优化动画

避免在高频事件中同步操作 DOM。

16. 使用 Web Worker 处理重计算

避免主线程阻塞 UI:

heavyCalculateDataInWorker();
17. 使用 Suspense + 时间切片(React 18)

React18 的 concurrent mode 支持时间分片:

  • 分段渲染

  • 提升可响应性

最实用的“十条黄金法则”

  1. 能拆组件就拆组件

  2. 子组件包上 React.memo

  3. 回调用 useCallback

  4. 计算结果用 useMemo

  5. 大列表使用虚拟列表

  6. 按需加载路由 & 组件

  7. 避免 context 覆盖太广

  8. Redux 用 RTK,selector 拆细

  9. 避免在 render 中创建对象

  10. 状态下放(越靠下越好)

http://www.jsqmd.com/news/69938/

相关文章:

  • 2025年度中国差速轮推荐厂家排行榜:差速轮解决方案提供商与 - myqiye
  • 2025年五大专业美缝品牌企业推荐,美缝公司排名全解析 - 工业品牌热点
  • 2025年电磁吸盘优质供应商TOP5推荐,专业电磁吸盘生产厂 - mypinpai
  • 2025年度五大食用菌机械设备资深厂商排行榜,新测评精选食用 - 工业推荐榜
  • 2025年高效除尘器制造企业推荐:定制与科技驱动的除尘方案全 - myqiye
  • 2025年郑州宠物美容学校排名TOP5权威推荐:甄选机构助力 - 工业品牌热点
  • 2025等离子表面处理机制造厂TOP5权威推荐:甄选靠谱服务 - mypinpai
  • HTML 动漫主题站模板(蜡笔小新风格)
  • 2025年上海婚姻律所权威推荐榜单:继承律所/房产律所/离婚事务所专业律师精选 - 品牌推荐官
  • 2025年度菌袋分离机制造商推荐排行榜,专业菌袋分离机制造商 - 工业推荐榜
  • 智谱免费模型
  • 2025年隆昌发酵缸陶坛生产源头厂家TOP5推荐:优质供应商 - 工业品牌热点
  • 2025年财税服务公司年度排名:九洲财务的实力怎样? - myqiye
  • 2025年五大实力不错的美缝品牌企业推荐,诚信的美缝企业全解 - mypinpai
  • C++学习笔记01 VisualStudio设置和引用概念
  • 求推荐能止痒的儿童洗发水!2025年针对特应性头皮护理的医学级成分与产品应用指南 - 资讯焦点
  • linux异常磁盘lvm恢复---惜分飞
  • 2025年上海房产继承律师权威推荐榜单:离婚律师/婚姻律师/继承律师源头服务商精选 - 品牌推荐官
  • win平台挂起Oracle数据库启动进程
  • 详细介绍:如何开发机器人的运动控制系统
  • 2025年活性硅微粉厂家权威推荐榜单:熔融硅微粉‌/高白硅微粉‌/结晶硅微粉源头厂家精选 - 品牌推荐官
  • 2025年新疆电线电缆厂家权威推荐榜单:电线电缆/电缆价格/线缆源头厂家精选 - 品牌推荐官
  • 编程课适合多大孩子学?一篇文章讲清楚
  • 2025年中国五大磁导航专业厂家推荐:看哪家技术实力强? - 工业推荐榜
  • 夹耳式无线蓝牙耳机怎么选?2025百元级性价比蓝牙耳机排行榜出炉
  • 2025年AI搜索排名服务公司推荐排行榜,AI搜索排名服务帮 - 工业品牌热点
  • 2025泡菜坛资深厂商TOP5权威推荐:正规实力厂商甄选指南 - myqiye
  • 2025实力强的美缝企业TOP5权威推荐:口碑好的美缝机构甄 - mypinpai
  • 2025别墅入户门终极选购指南:十大品牌权威榜单揭晓 - 匠子网络
  • 实用指南:Flutter 应用怎么加固,多工具组合的工程化实战(Flutter 加固/Dart 混淆/IPA 成品加固/Ipa Guard + CI)