当前位置:   article > 正文

React Router v5 版本中,路由传参主要方式

React Router v5 版本中,路由传参主要方式

在 React Router v5 版本中,路由传参主要有以下几种方式:

1. 动态路由参数(:param

通过在路由路径中使用 : 后跟参数名的形式,可以捕获特定部分的 URL 路径作为参数传递给目标组件。在目标组件中,可以使用 useParams 钩子来获取这些参数。

路由配置

  1. import { Route } from 'react-router-dom';
  2. // ...
  3. <Route path="/user/:userId" component={UserProfile} />

目标组件

  1. import { useParams } from 'react-router-dom';
  2. function UserProfile() {
  3. const { userId } = useParams();
  4. return (
  5. <div>
  6. <h1>User Profile: {userId}</h1>
  7. {/* ... */}
  8. </div>
  9. );
  10. }

2. URL 查询参数(?query=value

通过在 URL 后面添加查询参数(query parameters),以 ?key=value 的形式传递。这些参数可以直接附加到 history.push 的 pathname 中,也可以通过 query 对象传递。在目标组件中,可以使用 useLocation 钩子结合 URLSearchParams 来获取查询参数。

跳转代码

  1. import { useHistory } from 'react-router-dom';
  2. function SomeComponent() {
  3. const history = useHistory();
  4. const handleClick = () => {
  5. const id = '123'; // 示例值
  6. history.push(`/user?id=${id}`); // 或 history.push({ pathname: '/user', query: { id } });
  7. };
  8. // ...
  9. }

目标组件

  1. import { useLocation } from 'react-router-dom';
  2. function UserProfile() {
  3. const { search } = useLocation();
  4. const params = new URLSearchParams(search);
  5. const userId = params.get('id');
  6. return (
  7. <div>
  8. <h1>User Profile: {userId}</h1>
  9. {/* ... */}
  10. </div>
  11. );
  12. }

3. history 对象的 state 属性

通过 history.push 方法的第二个参数(一个对象)传递 statestate 是一个任意的 JavaScript 对象,它不会出现在 URL 中,但会在路由跳转过程中被保存在 history 对象中。在目标组件中,可以通过 useLocation 钩子的 location.state 属性来获取这些数据。

跳转代码

  1. import { useHistory } from 'react-router-dom';
  2. function SomeComponent() {
  3. const history = useHistory();
  4. const handleClick = () => {
  5. const user = { id: '123', name: 'John Doe' }; // 示例对象
  6. history.push('/user', { user });
  7. };
  8. // ...
  9. }

目标组件

  1. import { useLocation } from 'react-router-dom';
  2. function UserProfile() {
  3. const { state } = useLocation();
  4. const { user } = state || {};
  5. return (
  6. <div>
  7. <h1>User Profile: {user.name} ({user.id})</h1>
  8. {/* ... */}
  9. </div>
  10. );
  11. }

综上所述,在 React Router v5 中,您可以使用动态路由参数、URL 查询参数或 history 对象的 state 来实现路由传参。每种方式适用于不同场景,动态路由参数适用于路径中固定位置的参数,查询参数适用于可选参数或需要在 URL 中可见的参数,而 state 适用于不需要在 URL 中显示的私密或复杂数据。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/510840
推荐阅读
相关标签
  

闽ICP备14008679号