本文讲解如何在 react router v6 中,通过 `uselocation` 配合 `key` 属性强制路由组件重渲染,解决因 url 路径相似(如仅含 `_` 符号差异)导致 `
在使用 React Router 时,一个常见误区是:当多个路由共用同一 path 模式(例如 /novosibirsk/:alias/:fullAlias?/:maxAlias?),仅靠 URL 字符串特征(如是否包含 _)判断渲染
正确做法是:利用 useLocation() 获取当前路由位置对象,并将其作为
import { useLocation } from 'react-router-dom';
// 在 Route 外层(如 Layout 或 Routes 包裹组件中)调用
const location = useLocation();
// 在 Routes 内使用
}>
{window.location.href.includes('_') ? (
) : (
)}
}
/>⚠️ 注意事项:
const { alias } = useParams();
const shouldRenderCart = alias?.includes('_');总结:路由组件不自动重渲染,不是 bug,而是性能优化设计。当业务逻辑强依赖 URL 微
小差异时,主动用 key={location} 是标准、轻量且符合 React 哲学的解决方案。