尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

react 性能优化的方案

react 性能优化的方案
📅 发布时间:2026/6/27 0:52:27

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. 状态下放(越靠下越好)

相关新闻

  • 2025年五大专业美缝品牌企业推荐,美缝公司排名全解析 - 工业品牌热点
  • 2025年度五大食用菌机械设备资深厂商排行榜,新测评精选食用 - 工业推荐榜
  • 2025年电磁吸盘优质供应商TOP5推荐,专业电磁吸盘生产厂 - mypinpai

最新新闻

  • 从零实现Paillier加法同态加密:Python实战与核心原理详解
  • 2026年大厂春招“大撒币”!AI岗位月薪6万+,收藏这份高薪指南,小白也能抓住财富机遇!
  • 2026免费在线AI抠图工具保姆级教程!手把手教你快速抠透明底素材
  • 杰理之时钟信号同步性排查【篇】
  • 信创协作:从合规达标到效率跃升的架构之变
  • PCB与FPC的本质差异及设计制造要点解析

日新闻

  • 单节点跑业务稳如泰山 扩容高可用集群反而频繁卡死 复盘完整连接交互揪出深层根因
  • Boss直聘批量投递工具:5倍效率提升的求职价值重构指南
  • 3分钟解锁VLC点击暂停插件:让视频控制变得如此简单!

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号