React Router 路由参数、查询参数与状态参数的使用
在 React 中,使用 React Router 进行路由管理时,可以通过 useParams、useLocation 和 useHistory(或 useNavigate,取决于 React Router 版本)等钩子函数来获取路由参数、查询参数和状态参数。以下是这些钩子函数的使用方法:
1. useParams - 获取路由参数
useParams 用于获取动态路由参数。例如,如果你有一个路由 /user/:id,你可以通过 useParams 获取 id 参数。
import { useParams } from 'react-router-dom';
function UserDetail() {
const { id } = useParams();
return (
<div>
<h1>User ID: {id}</h1>
</div>
);
}2. useLocation - 获取查询参数和状态参数
useLocation 返回当前路由的 location 对象,其中包含 search 和 state 属性。search 是查询字符串,state 是路由跳转时传递的状态。
获取查询参数
你可以使用 URLSearchParams 来解析查询字符串。
import { useLocation } from 'react-router-dom';
function UserList() {
const location = useLocation();
const queryParams = new URLSearchParams(location.search);
const name = queryParams.get('name');
return (
<div>
<h1>User List</h1>
<p>Name: {name}</p>
</div>
);
}获取状态参数
location.state 可以获取通过 navigate 或 Link 传递的状态。
import { useLocation } from 'react-router-dom';
function UserDetail() {
const location = useLocation();
const user = location.state?.user;
return (
<div>
<h1>User Detail</h1>
<p>Name: {user?.name}</p>
<p>Age: {user?.age}</p>
</div>
);
}3. useNavigate - 导航并传递状态参数
useNavigate 是 React Router v6 中用于导航的钩子函数。你可以使用它来跳转到其他路由并传递状态参数。
import { useNavigate } from 'react-router-dom';
function UserList() {
const navigate = useNavigate();
const handleClick = () => {
navigate('/user/123', { state: { user: { name: 'John', age: 30 } } });
};
return (
<div>
<h1>User List</h1>
<button onClick={handleClick}>Go to User Detail</button>
</div>
);
}4. useSearchParams - 获取和设置查询参数
useSearchParams 是 React Router v6 中用于获取和设置查询参数的钩子函数。
import { useSearchParams } from 'react-router-dom';
function UserList() {
const [searchParams, setSearchParams] = useSearchParams();
const name = searchParams.get('name');
const handleChange = (event) => {
setSearchParams({ name: event.target.value });
};
return (
<div>
<h1>User List</h1>
<input type="text" value={name || ''} onChange={handleChange} />
<p>Name: {name}</p>
</div>
);
}总结
useParams:获取动态路由参数。useLocation:获取查询参数和状态参数。useNavigate:导航并传递状态参数。useSearchParams:获取和设置查询参数。
这些钩子函数可以帮助你在 React 应用中更灵活地处理路由参数、查询参数和状态参数。