在React Router v6升级后,我们遇到了页面切换时的卡顿问题。经过深入排查,发现主要原因是路由组件重新渲染导致的性能问题。
问题复现步骤:
- 在v6中使用
<Routes>包裹多个路由组件 - 路由组件内包含大量DOM元素和复杂计算逻辑
- 切换路由时页面出现明显卡顿
核心原因分析: 在v6版本中,当路由切换时,所有匹配的路由组件都会重新挂载。如果我们有类似这样的代码结构:
<Routes>
<Route path="/user/:id" element={<UserPage />} />
<Route path="/user/:id/profile" element={<UserProfile />} />
</Routes>
当从/user/123切换到/user/123/profile时,两个组件都会重新渲染。如果这些组件内有大量数据处理或复杂计算,就会导致页面卡顿。
解决方案:
- 使用React.memo优化组件渲染
- 将共享状态提取到父组件中
- 合理使用useCallback和useMemo
- 对于复杂组件采用懒加载策略
通过以上优化,页面切换性能得到显著提升。

讨论