ant design Pro 跳转路由--带参数的跳转

本文详细介绍了在Ant Design Pro项目中如何进行路由跳转,包括不带参数、带参数id和data的路由跳转,并讨论了params和query传参的优缺点。推荐使用Link组件和query方式进行路由传参,因为params在刷新后无法获取,而query参数则始终存在。

近期使用ant design Pro 项目中遇到跳转路由的问题,
一开始是遇到创建 跳转到创建页面的问题
这一篇文章干货满满哦
首先 我的跳转的路径是在modal中写的
上代码

routerRedux跳转路由 /router

import router from ‘umi/router’;
import { routerRedux } from ‘dva/router’;

不带参数的路由跳转

首先使用import { routerRedux } from 'dva/router';
modal中
在这里插入图片描述
然后在js中点击创建按钮进行跳转
在这里插入图片描述

带参数id的路由跳转
  • 同样 跳转路径还是写在modal中
  • 在这里插入图片描述
    首先在路由配置的地方也要改
    在这里插入图片描述
    在js中同样的方式dispatch调用
    在这里插入图片描述
    在create的页面中
	componentDidMount () {
	    console.log(this.props.match.params.id)
	}

拿到跳转后的id的值

带参数data的路由跳转

modal中同样
在这里插入图片描述
使用json.stringify先把对象解析
router.config.js中
在这里插入图片描述
在创建点击的事件中同样
在这里插入图片描述
在create的页面中

	componentDidMount () {
	    console.log(this.props.match.params.data)
	}

在这里插入图片描述
需要在转化成对象

	componentDidMount () {
	    console.log(JSON.parse(this.props.match.params.data))
	}

在这里插入图片描述

以下的方法中router中都不需要配置
params传参跳转(不推荐, 刷新后获取不到参数值)

在这里插入图片描述

  // 创建
  onCreate = () => {
   
    this.props.dispatch(routerRedux.push({
      pathname: '/api-manage/create-sub-system',
      params: {
        id: 6,
        value: 'lala',
      }
    }))
  };

创建的页面通过
this.props.location获取到值
在这里插入图片描述
但是在当前页面进行刷新以后就获取不到params的值了
在这里插入图片描述
但是通过上述两个的对比可以看出query一直存在, 所以我们可以通过query来进行路由传参

query路由传参(推荐)

在这里插入图片描述

 // 创建
  onCreate = () => {
    this.props.dispatch(routerRedux.push({
      pathname: '/api-manage/create-sub-system',
      query: {
        id: 6,
        value: 'lala',
      }
    }))
  };

创建页面通过this.props.location
在这里插入图片描述

Link 进行路由跳转(极力推荐)

import Link from 'umi/link';
在这里插入图片描述

import Link from 'umi/link';
<Link to={{
     pathname: '/api-manage/create-sub-system',
      query: {
        id: 6,
        value: 'lala',
      }
    }}>
      <Button
        style={{ marginLeft: 8 }}
        type="primary"
      // onClick={this.onCreate}
      >
        <Icon type="plus" />
        创建
    </Button>
 </Link>

create页面 this.props.location拿到值
在这里插入图片描述

同query一样的还有一个state方式, 只是属性不一样, state传的参数是加密的, query 传的参数是公开的,

在这里插入图片描述
在这里插入图片描述
以上通过过r Link parmas state 或者routerRedux.push方式的路由跳转传参都可以使用js中的 this.props.history.push方式

Ant Design Pro 框架中,带参数路由配置可以通过以下几种常见方式实现: ### 路径参数 路径参数是将参数作为 URL 的一部分,在路由配置中使用冒号 `:` 来定义参数。 #### 路由配置 在 `config/routes.js` 或相关路由配置文件中定义带参数路由: ```javascript [ { path: '/user/:id', component: '@/pages/UserDetail', }, ]; ``` 这里的 `:id` 就是一个路径参数。 #### 路由跳转传参 可以使用 `Link` 组件、`history` 对象或 `navigate` 函数进行跳转并传递参数。 使用 `Link` 组件: ```jsx import { Link } from 'umi'; <Link to="/user/123">查看用户详情</Link> ``` 使用 `history` 对象: ```jsx import { useHistory } from 'umi'; const history = useHistory(); history.push('/user/123'); ``` 使用 `navigate` 函数: ```jsx import { useNavigate } from 'umi'; const navigate = useNavigate(); navigate('/user/123'); ``` #### 获取参数 在目标组件中,可以使用 `useParams` 钩子获取路径参数: ```jsx import { useParams } from 'umi'; const UserDetail = () => { const { id } = useParams(); return <div>用户 ID 为: {id}</div>; }; export default UserDetail; ``` ### 查询参数 查询参数是将参数附加在 URL 的问号 `?` 后面,使用 `&` 分隔多个参数。 #### 路由配置 查询参数不需要在路由配置中特别定义,普通的路由配置即可: ```javascript [ { path: '/search', component: '@/pages/SearchResult', }, ]; ``` #### 路由跳转传参 使用 `Link` 组件、`history` 对象或 `navigate` 函数进行跳转并传递查询参数。 使用 `Link` 组件: ```jsx import { Link } from 'umi'; <Link to="/search?keyword=apple">搜索苹果</Link> ``` 使用 `history` 对象: ```jsx import { useHistory } from 'umi'; const history = useHistory(); history.push('/search?keyword=apple'); ``` 使用 `navigate` 函数: ```jsx import { useNavigate } from 'umi'; const navigate = useNavigate(); navigate('/search?keyword=apple'); ``` #### 获取参数 在目标组件中,可以使用 `useLocation` 钩子获取查询参数: ```jsx import { useLocation } from 'umi'; import qs from 'qs'; const SearchResult = () => { const location = useLocation(); const query = qs.parse(location.search, { ignoreQueryPrefix: true }); const keyword = query.keyword; return <div>搜索关键词为: {keyword}</div>; }; export default SearchResult; ``` ### 状态参数 状态参数是在路由跳转时传递一些不显示在 URL 中的数据。 #### 路由跳转传参 使用 `history` 对象或 `navigate` 函数传递状态参数。 使用 `history` 对象: ```jsx import { useHistory } from 'umi'; const history = useHistory(); history.push('/profile', { name: 'John', age: 30 }); ``` 使用 `navigate` 函数: ```jsx import { useNavigate } from 'umi'; const navigate = useNavigate(); navigate('/profile', { state: { name: 'John', age: 30 } }); ``` #### 获取参数 在目标组件中,可以使用 `useLocation` 钩子获取状态参数: ```jsx import { useLocation } from 'umi'; const Profile = () => { const location = useLocation(); const { name, age } = location.state; return ( <div> 姓名: {name}, 年龄: {age} </div> ); }; export default Profile; ```
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值