React 三种路由传参

React 三种路由传参

示例图片

1、params传参

优势 : 刷新地址栏,参数依然存在

缺点:只能传字符串,并且,如果传的值太多的话,url会变得长而丑陋。

// 路由页面:
<Route path='/home/message/detail/:id/:title' component={Detail}/>  //注意要配置 /:id
//路由跳转并传递参数:
    //链接方式:
 <Link to={`/home/message/detail/${id}/${title}`}>{title}</Link>
        //或:
<Link to={{pathname:`/home/message/detail/${id}/${title}`}}>{title}</Link>

    //js方式:
this.props.history.push(`/home/message/detail/${id}/${title}`)  
       // 或:
this.props.history.push({pathname:`/home/message/detail/${id}/${title}`})
        //获取参数:
const {id,title}  = this.props.match.params    //注意这里是match而非history

2、query与state传参

优势:传参优雅,传递参数可传对象;但是state 传参的方式只支持Browserrouter路由,不支持hashrouter

缺点:刷新地址栏,参数丢失

  • 2.1、query传参
//路由页面:
<Route path="/home/message/detail" component={Detail}/> //无需配置
//路由跳转并传递参数:
 //   链接方式:
<Link to={{
    pathname: '/home/message/detail',
    query: {id:id, title: title}
}}>{title}</Link>
//js方式:
this.props.history.push({
    pathname: '/home/message/detail',
    query: {id, title}
})
//获取参数: 
const {id, title} = this.props.location.query ||{}
  • 2.2、state传参
//路由页面:
<Route path="/home/message/detail" component={Detail}/> //无需配置
//路由跳转并传递参数:
 //   链接方式:
<Link to={{
    pathname: '/home/message/detail',
    state: {id:id, title: title}
}}>{title}</Link>
//js方式:
this.props.history.push({
    pathname: '/home/message/detail',
    state: {id, title}
})
//获取参数: 
const {id, title} = this.props.location.state ||{}

###3、search传参

优势 : 刷新地址栏,参数依然存在

缺点:只能传字符串,并且,如果传的值太多的话,url会变得长而丑陋。


//路由页面:
<Route path='/home/message/detail' component={Detail}/>
//路由跳转并传递参数:
 //   链接方式:
<Link to={`/home/message/detail/?id=${id}&title=${title}`}>{title}</Link>//无需配置

//js方式:
this.props.history.replace(`/home/message/detail/?id=${id}&title=${title}`)
//获取参数: 
const {search} = this.props.location 
const {id, title} = qs.parse(search.slice(1)) //slice去掉前面的'?'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万水千山走遍TML

您的鼓励,将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值