当使用 react router 的 `navlink` 导航时,相同路径模式下的路由不会自动重渲染,导致基于 url 特征(如下划线 `_`)的组件判断失效;可通过 `uselocation()` 配合 `key` 属性强制路由重新挂载来解决。
在 React Router v6 中,
根本原因在于:window.location.href 是全局状态,不被 React 响应式系统追踪;且 NavLink 导航属于客户端路由跳转,不触发页面刷新,因此条件判断逻辑不会自动更新。
✅ 正确解法:利用 useLocation() Hook 获取当前路由位置对象,并将其作为
组件树:
import { useLocation } from 'react-router-dom';
// 在 Route 外层(如 Routes 包裹的组件内)调用
const location = useLocation();
// 然后在 Route 中设置 key
}>
{location.pathname.includes('_') ? (
) : (
)}
}
/>⚠️ 注意事项:
总结:路由组件的“伪重载”并非靠模拟刷新实现,而是通过 key 触发 React 的 reconciliation 机制。结合 useLocation(),即可在保持单页体验的同时,精准响应 URL 微小差异(如 _ 符号),实现语义化、可预测的动态路由渲染。