React三种路由传参

568 阅读1分钟

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去掉前面的'?'