贝利信息

React Router v6 中如何正确访问路由位置信息(location)

日期:2026-01-20 00:00 / 作者:心靈之曲

在 react router v6 中,`props.location` 不再自动注入组件,需改用 `uselocation()` hook 获取当前路由的 location 对象(含 `pathname`、`search`、`state` 等),否则将返回 `undefined`。

React Router v6 彻底移除了旧版中通过 props 传递 location、history 和 match 的机制,转而全面采用 Hooks API。这意味着:任何函数组件若需访问路由状态(如 URL 参数、查询字符串或导航时携带的 state),都必须显式调用 useLocation()、useNavigate() 或 useParams() 等 Hook

以你的场景为例——通过 传递用户对象作为 state:


  查看用户详情

注意:你原代码中手动构造 search: '?name=...' 并非必需;state 是更安全、更推荐的方式——它不会暴露在 URL 中,支持任意可序列化数据(如完整用户对象),且不会触发服务端解析或 SEO 索引问题。

在目标组件 Detail 中,应使用 useLocation() 获取该 state:

i

mport { useLocation } from 'react-router-dom'; function Detail() { const { state } = useLocation(); // ✅ 解构获取传递的 state console.log('传递的用户数据:', state); // 如 { name: "Alice", id: 123, email: "a@example.com" } // 安全访问,防止未定义错误 if (!state) { return

用户信息缺失,请从有效入口进入

; } return (

用户详情

姓名:{state.name}

ID:{state.id}

邮箱:{state.email}

); } export default Detail;

⚠️ 重要注意事项:

总结:告别 props.location,拥抱 useLocation() —— 这是 React Router v6 的标准实践。结合 的声明式导航,即可安全、简洁地传递复杂数据,同时保持代码清晰与可维护性。