博主头像
<CodeEra />

心存敬畏 行有所止

React Router 路由参数、查询参数与状态参数的使用

在 React 中,使用 React Router 进行路由管理时,可以通过 useParamsuseLocationuseHistory(或 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 对象,其中包含 searchstate 属性。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 可以获取通过 navigateLink 传递的状态。

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 应用中更灵活地处理路由参数、查询参数和状态参数。

发表新评论