react路由传参的几种方式

2019-12-13  本文已影响0人  shenjianbo
前言:为什么要用react?-.-

react版本:16.12.0
react-dom版本:16.12.0
react-router-dom:5.1.2

为什么我要提我当前的版本?用过react的人应该深有体会,版本切记一定要匹配,我这里提到的方式并不一定适用其他版本,目前我下载的是最新的react及路由

Link标签传参
第一种 pathname + search
A页面
<Link to={{pathname: '/setting', search:'id=1'}}>jump --- search</Link>
// 取参
B页面
this.props.history.location.search
第二种 pathname + 任意属性
A页面
<Link to={{pathname: '/setting', abc:{id:1}}}>jump --- query</Link>
// 取参
B页面
this.props.history.location.abc.id
第三种 pathname + state
A页面
<Link to={{pathname: '/setting', state:{id:1}}}>jump --- state</Link>
// 取参
B页面
this.props.history.location.state.id
第四种(错误示范) pathname + 拼接
A页面
let params = 'a=1&b=2';
<Link to={{pathname: `/setting?${params }`}}>jump --- 拼接</Link>
// 取参
B页面
this.props.history.location.search
第五种 pathname + params
// 动态路由后面加?表示可选,不加表示必选
<Route path="/setting/:id?" component={Setting}></Route>
A页面
let id = 1;
<Link to={{pathname: `/setting/${id}`}}>jump --- params</Link>
// 取参
B页面
this.props.history.match.params.id
js形式传参及跳转
第一种 使用原生的方式
window.location.hash = '/setting'
// 拼接search参数
window.location.hash = '/setting?a=1'
// 取值
this.props.history.location.search
第二种 pathname + search
this.props.history.push({
  pathname: '/setting',
  search: 'a=1'
})
// 取参
this.props.history.location.search
第三种 pathname + state
this.props.history.push({
  pathname: '/setting',
  state: {
    id: 1
  }
})
// 取参
this.props.history.location.state.id
第四种 pathname + 任意属性
this.props.history.push({
  pathname: '/setting',
  abc: {
    id: 1
  }
})
// 取参
this.props.history.location.abc.id

当一个路由点击多次,将会出现警告,使用replace,这样会替换历史记录中上一次相同路由记录,而push会添加新的相同记录进去,hash路由会有这个问题,Browser形式的则不会

Link + replace
<Link to="/setting" replace/>
js
this.props.history.replace('/setting')
注意
上一篇 下一篇

猜你喜欢

热点阅读