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