面试题答案
一键面试实现思路
- 使用相对路径:在
Link
和NavLink
中尽量使用相对路径,这样无论在嵌套路由的哪一层,都能准确地导航到目标路由。例如,若当前路由为/parent/:parentId/child
,要导航到/parent/:parentId/sibling
,可使用Link to="sibling"
。 - 处理动态路由参数:当存在动态路由参数时,确保在
Link
和NavLink
中正确传递参数。可以使用模板字符串构建路径,例如Link to={
/parent/${parentId}/sibling}
,其中parentId
是动态参数。 - NavLink的activeClassName和activeStyle:在多层嵌套路由中,通过合理设置
NavLink
的activeClassName
和activeStyle
来准确标识当前激活的导航项。例如,当/parent/:parentId/child
激活时,给对应的NavLink
添加特定样式,以告知用户当前所在位置。
优化策略
- 减少重渲染:将
Link
和NavLink
组件提升到父组件中,避免在子组件频繁重渲染时导致不必要的导航更新。例如,如果子组件由于某些状态变化而重渲染,但导航逻辑不应受影响,此时将导航组件放在更高层级可减少性能损耗。 - 路由懒加载:结合React的路由懒加载机制,当使用
Link
和NavLink
导航到新路由时,只有在真正需要时才加载对应的组件。例如,在React Router
中可以使用React.lazy
和Suspense
实现懒加载,这样可避免一次性加载所有路由组件,提升初始加载性能。 - 避免不必要的计算:在构建
Link
和NavLink
的to
属性时,避免复杂的计算逻辑。如果计算逻辑依赖频繁变化的数据,可将其缓存或者只在必要时重新计算,防止每次渲染都进行不必要的计算从而导致性能瓶颈。