前端/移动开发面试题更新 2026-08-05

在 React Router 中,当路由发生变化但目标组件是同一个组件时,应该如何触发该组件的重新渲染?请阐述实现方式及原理。

前端/移动开发技术原理ReactReact Router

考察说明

考察对 React Router 路由变化与组件生命周期关系的理解,以及如何强制重新渲染同一组件的技术方案。

回答思路

  1. 【回答框架 1】当路由变化导致渲染的组件类型相同时,React 会复用该组件实例,不会触发重新挂载,但会更新传入的 props(如路由参数)。组件可以通过 props 变化来感知路由变化。
  2. 【回答框架 2】可以利用 React Router 提供的 Hook,例如 useParams、useLocation,这些 Hook 会订阅路由变化,当路由变化时,组件会重新渲染。这是最常见的方式,也是官方推荐的做法。
  3. 【回答框架 3】如果需要在路由变化时执行副作用,可以在 useEffect 中监听依赖的 params 或 location,因为依赖变化会触发 effect 重新执行。
  4. 【回答框架 4】如果需要强制重新挂载组件,可以在组件上使用 key 属性,将路由参数或 location.key 作为 key,这样路由变化时 key 改变,React 会卸载旧组件并挂载新组件。
  5. 【关键点 1】React 复用相同类型组件实例,不会自动重新挂载,但会更新 props。
  6. 【关键点 2】使用 useParams、useLocation 等 Hook 可响应路由变化,触发重新渲染。
  7. 【关键点 3】使用 key 属性强制重新挂载组件。
  8. 【易错点 1】不推荐直接使用 shouldComponentUpdate 或手动强制刷新,因为可能破坏组件状态。
  9. 【易错点 2】如果依赖 route path 而非参数变化,组件可能不会重新渲染,需要确保监听正确的源。