路由传参方式

本文介绍了React.js中四种路由传参方式:params、search、query和state。重点讲解了params方式,包括参数不丢失的情况,多个动态参数的传递,以及参数非必传的处理。同时提到search方式使用qs库转化URL参数,query传参刷新后参数消失,以及state模式下参数刷新后会丢失的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

路由传参方式

1.params方式

参数不丢失但是需要一个个手动定义

this.props.history.push({pathname:`/detail/${id}`})

获取参数

this.props.match.params.id

路由文件中的配置

<Route path="/detail/:id/:orderId?" component={Detail} />

1.1 params传参(刷新页面后参数不消失,参数会在地址栏显示)

路由页面:

注意要配置 /:id

<Route path='/demo/:id' component={Demo}></Route>  
路由跳转并传递参数:
链接方式:
		<Link to={'/demo/'+'6'}>XX</Link>
或:<Link to={{pathname:'/demo/'+'6'}}>XX</Link>

js方式:
	 this.props.history.push('/demo/'+'6')  
或:this.props.history.push({pathname:'/demo/'+'6'})
获取参数:
this.props.match.params.id    //注意这里是match而非history
或
import {useParams} from 'react-router-dom';
const params = useParams();
console.log(params); //{id:6}

1.2 params传参(刷新页面后参数不消失,多个动态参数)

路由页面:

注意要配置 /:type/:id 这两个参数是必传

<Route path='/detail/:type/:id' component={Demo}></Route>  
路由跳转并传递参数:

此时不传type和id跳转过去页面不出来,带参数的可以正常显示

链接方式:
<Link to="/detail">新增</Link> 
<Link to={`/detail/1/${record.id}`}>查看</Link>
<Link to={`/detail/2/${record.id}`}>编辑</Link>
或
<Link to={{pathname:`/detail/1/${record.id}`}}>查看</Link>

js方式:this.props.history.push({pathname:`/detail/1/${record.id}`})
获取参数:
this.props.match.params     //结果 {type: '1', id: '1'}

1.3 params传参,参数非必传(刷新页面后参数不消失,多个动态参数)

路由页面:

注意要配置 /:type? 加问号?

<Route path='/detail/:type?/:id?' component={Demo}></Route>  
路由跳转并传递参数:
链接方式:
  <Link to="/detail">新增</Link>
  <Link to={`/detail/1/${record.id}`}>查看</Link>
  <Link to={`/detail/2/${record.id}`}>编辑</Link>
或:
<Link to={{pathname:`/detail/1/${record.id}`}}>查看</Link>
<Link to={{pathname:`/detail/2/${record.id}`}}>编辑</Link>

js方式:
	 this.props.history.push(`/detail/1/${record.id}`)  
或:this.props.history.push({pathname:`/detail/1/${record.id}`})
获取参数:

注意这里是match而非history

获取参数:
this.props.match.params.id    
或
import {useParams} from 'react-router-dom';
const params = useParams();
console.log(params); //结果 {type: '2', id: '1'}

2.search方式

也就是url方式,使用qs库将对象转化为url参数方式

this.props.history.push({
  pathname: `/detail`,
   search: qs.stringify({id:1, type:'edit'}),
 });

获取参数

const { id } = qs.parse(this.props.location.search)

3. query传参(刷新页面后参数消失)

路由页面:
<Route path='/demo' component={Demo}></Route>  //无需配置

路由跳转并传递参数:
链接方式:<Link to={{pathname:'/demo',query:{id:22,name:'dahuang'}}}>XX</Link>
js方式:this.props.history.push({pathname:'/demo',query:{id:22,name:'dahuang'}})

获取参数: 
this.props.location.query.name
或
import {useParams} from 'react-router-dom';
const location = useLocation();
console.log(location.state);

4.state模式

刷新参数会丢失

this.props.history.push({
   pathname: `/detail`,
   state: {
     id: record.id,
     type: 1,
   },
 });

获取参数

this.props.location.state.id

返回上一页

this.props.history.go(-1)

state传参demo

刷新页面后获取不到参数,state传的参数是加密的,比query传参好用

路由页面:
<Route path='/demo' component={Demo}></Route>  //无需配置参数名

路由跳转并传递参数:
链接方式: <Link to={{pathname:'/demo',state:{id:12,name:'dahuang'}}}>XX</Link> 
js方式:this.props.history.push({pathname:'/demo',state:{id:12,name:'dahuang'}})


获取参数: 
this.props.location.state.name
或
import {useParams} from 'react-router-dom';
const location = useLocation();
console.log(location.state);

感谢阅读

❤️关注+点赞+收藏+评论+转发❤️,原创不易,鼓励笔者创作更好的文章

关注公众号小圆脸儿,一个专注于web前端基础、工程化、面试的前端公众号,偶尔也会发发生活

在Vue 2中,有几种路由参数的方式。以下是其中一些常见的方式: 1. 路径参数(Path Parameters):通过在路由路径中添加占位符来递参数。在定义路由时,可以使用`:`来指定参数名称,然后在实际跳转时,将对应的值填入路径中。例如: ```javascript // 路由定义 { path: '/user/:id', component: User, } // 实际跳转 router.push('/user/123'); ``` 在上述例子中,`:id`是一个占位符,代表要递的参数名称,可以在`User`组件中通过`$route.params.id`来获取递的值。 2. 查询参数(Query Parameters):通过在URL中添加查询参数来递数据。可以使用`query`方法或者`router-link`组件的`to`属性来生成包含查询参数的URL。例如: ```javascript // query方法 router.push({ path: '/user', query: { id: 123 } }); // router-link组件 <router-link :to="{ path: '/user', query: { id: 123 } }">User</router-link> ``` 在上述例子中,递的参数名称是`id`,可以在`User`组件中通过`$route.query.id`来获取递的值。 3. 命名路由(Named Routes):给路由命名可以简化路由跳转,并且可以带有参数。首先,在定义路由时,给路由对象添加一个`name`属性。然后,在实际跳转时,使用`name`属性来指定要跳转的路由,并递参数。例如: ```javascript // 路由定义 { path: '/user/:id', name: 'user', component: User, } // 实际跳转 router.push({ name: 'user', params: { id: 123 } }); ``` 在上述例子中,通过给路由定义一个`name`属性,可以使用`name`属性来指定要跳转的路由,并通过`params`属性递参数。在`User`组件中,可以通过`$route.params.id`来获取递的值。 这些是Vue 2中常用的路由传参方式,根据具体的需求,选择适合的方式递参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值