news 2026/7/2 1:09:38

useNavigate、useParams、useLocation 用法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
useNavigate、useParams、useLocation 用法

useNavigateuseParamsuseLocation是 React Router v6 中最常用的三个 Hooks,它们只能在函数组件中使用。


一、useNavigate(页面跳转)

作用:

用来进行页面跳转,相当于以前 React Router v5 的history.push()history.replace()

1、导入

import { useNavigate } from "react-router-dom";

2、基本使用

import { useNavigate } from "react-router-dom"; function Home() { const navigate = useNavigate(); const goUser = () => { navigate("/user"); }; return ( <button onClick={goUser}> 去用户页 </button> ); }

点击以后:

当前页面 ↓ /user

3、传递参数(query)

例如:

/user?id=100&name=Tom
navigate("/user?id=100&name=Tom");

或者

navigate({ pathname: "/user", search: "?id=100&name=Tom" });

4、传递 state(推荐页面间数据传递)

navigate("/user", { state: { id: 100, name: "Tom" } });

目标页面:

const location = useLocation(); console.log(location.state);

输出

{ id:100, name:"Tom" }

5、replace 跳转

不会留下历史记录。

navigate("/login", { replace: true });

相当于

history.replace()

适用于:

登录成功

login ↓ home

按返回键不会回到 login。


6、前进后退

后退

navigate(-1);

前进

navigate(1);

回退两页

navigate(-2);

例如:

A ↓ B ↓ C navigate(-1) 返回 B

useNavigate 总结

navigate("/home") navigate("/home?id=1") navigate("/home",{ state:{} }) navigate("/home",{ replace:true }) navigate(-1)

二、useParams(获取动态路由参数)

作用:

获取 URL 中的动态参数。


1、配置路由

<Route path="/user/:id" element={<User />} />

这里

:id

就是动态参数。

例如:

/user/100

100 就是 id。


2、获取参数

import { useParams } from "react-router-dom"; function User() { const params = useParams(); console.log(params); return <div>用户页面</div>; }

输出

{ id:"100" }

3、多个参数

路由:

<Route path="/user/:id/:name" element={<User />} />

地址:

/user/100/Tom

获取

const params = useParams(); console.log(params);

输出

{ id:"100", name:"Tom" }

4、TS 写法

const { id } = useParams<{ id: string; }>();

或者(React Router v6 更推荐)

const { id } = useParams<{ id: string }>();

useParams 总结

路由:

/user/:id/:name

地址:

/user/100/Tom

获取:

const { id, name } = useParams();

三、useLocation(获取当前路由信息)

作用:

获取当前 URL、query、hash、state 等信息。


1、导入

import { useLocation } from "react-router-dom";

2、获取 location

const location = useLocation(); console.log(location);

例如:

http://localhost:3000/user?id=100#abc

输出:

{ pathname:"/user", search:"?id=100", hash:"#abc", state:null, key:"xxx" }

3、pathname

获取路径

const location = useLocation(); console.log(location.pathname);

输出

/user

4、search(Query 参数)

例如:

/user?id=100&name=Tom

获取

const location = useLocation(); console.log(location.search);

输出

?id=100&name=Tom

这是字符串。

需要解析。


5、解析 Query 参数

推荐使用浏览器内置的URLSearchParams

const location = useLocation(); const searchParams = new URLSearchParams(location.search); console.log(searchParams.get("id")); console.log(searchParams.get("name"));

输出:

100 Tom

也可以直接使用 React Router 提供的useSearchParams(更推荐):

import { useSearchParams } from "react-router-dom"; const [searchParams] = useSearchParams(); console.log(searchParams.get("id")); console.log(searchParams.get("name"));

6、获取 state

上一页

navigate("/user",{ state:{ id:100, name:"Tom" } })

目标页

const location = useLocation(); console.log(location.state);

输出

{ id:100, name:"Tom" }

7、hash

/user#abc

获取

console.log(location.hash);

输出

#abc

useLocation 总结

const location = useLocation(); location.pathname location.search location.hash location.state

三者之间的关系

Hook作用示例
useNavigate编程式导航navigate("/home")
useParams获取路径参数(Path Params)/user/:idid
useLocation获取当前路由信息pathnamesearchhashstate

完整示例

路由配置

import { BrowserRouter, Routes, Route } from "react-router-dom"; <BrowserRouter> <Routes> <Route path="/" element={<Home />} /> <Route path="/user/:id" element={<User />} /> </Routes> </BrowserRouter>;

Home.tsx

import { useNavigate } from "react-router-dom"; export default function Home() { const navigate = useNavigate(); const goUser = () => { navigate("/user/100?role=admin", { state: { name: "Tom", }, }); }; return <button onClick={goUser}>进入用户页</button>; }

User.tsx

import { useLocation, useParams, useSearchParams, } from "react-router-dom"; export default function User() { // 路径参数 const { id } = useParams<{ id: string }>(); // Query 参数 const [searchParams] = useSearchParams(); const role = searchParams.get("role"); // 路由信息 const location = useLocation(); return ( <div> <h2>用户页面</h2> <p>id:{id}</p> <p>role:{role}</p> <p>state:{JSON.stringify(location.state)}</p> <p>pathname:{location.pathname}</p> </div> ); }

访问流程:

Home │ │ navigate("/user/100?role=admin", { │ state: { name: "Tom" } │ }) ▼ URL: /user/100?role=admin useParams() → { id: "100" } useSearchParams() → role = "admin" useLocation() → { pathname: "/user/100", search: "?role=admin", state: { name: "Tom" } }

如何选择?

  • 需要跳转页面:使用useNavigate

  • 需要获取/user/:id这类路径参数:使用useParams

  • 需要获取当前路径、statehash等完整路由信息:使用useLocation

  • 需要读取或修改查询参数(?key=value:优先使用useSearchParams,比手动解析location.search更方便。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/2 1:07:26

systemctl daemon-reload systemctl restart docker 解释并说明下这个命令

这个命令由两部分通过 && 连接组成&#xff0c;整体作用是重新加载 systemd 配置后重启 Docker 服务。逐部分解释1. systemctl daemon-reload作用&#xff1a;通知 systemd 重新读取所有单元文件&#xff08;unit files&#xff09;的配置&#xff0c;不重启任何服务。…

作者头像 李华
网站建设 2026/7/2 1:06:11

《向师祖献上咸鱼》小说|下载|txt

资料可下载《向师祖献上咸鱼》小说全文百度可下载https://pan.baidu.com/s/1LYfAAcggGwF4CfkYI-WjPA?pwdbf58 English Practice Set 48 个人练习草稿&#xff0c;随便记几道题。 Part 1 Vocabulary Choose the best word. The old master lived alone on the top of the _…

作者头像 李华
网站建设 2026/7/2 1:01:38

2026全国网站建设公司排行榜:品牌官网与企业门户深度评测

企业网站的价值&#xff0c;很少发生在上线那天。真正有用的网站&#xff0c;会在后面的产品更新、内容沉淀、销售沟通、询盘承接和品牌传播中不断发挥作用。 全国企业的项目跨度很大&#xff1a;连锁零售要做会员和订单&#xff0c;制造企业要接设备、库存和售后&#xff0c;服…

作者头像 李华
网站建设 2026/7/2 0:43:57

2026:每月10小时免费额度,m4a转文字最简单方法省钱指南

先回答用户真正关心的问题 2026年要找「每月10小时免费额度以内&#xff0c;m4a转文字最简单方法」&#xff0c;不用到处找小众工具踩坑&#xff0c;目前主流的正规AI转写工具里&#xff0c;就有能满足需求的选项。只要根据你自己每月的转写时长、要不要后续整理内容来选&…

作者头像 李华