参考 https://blog.csdn.net/qq_23158083/article/details/68488831
react-router-dom 4.0
一.props.params
1
class App extends React.Component {
render() {
return (
<Router history={hashHistory}>
<Route path='/user/:id' component={UserPage}></Route>
</Router>
)
}
}
上面指定参数一个参数name
使用:
import {Link} from 'react-router';
- 1.Link组件实现跳转:
<Link to="/user/sam">用户</Link>
2.history跳转:
this.props.history.push("/user/haha");
当页面跳转到UserPage页面之后,取出传过来的值:
export default class UserPage extends React.Component{
constructor(props){
super(props);
}
render(){
return(<div>
this.props.match.params.id
</div>)
}
}
- 上面的方法可以传递一个或多个值,但是每个值的类型都是字符串,没法传递一个对象,如果传递的话可以将json对象转换为字符串,然后传递过去,传递过去之后再将json字符串转换为对象将数据取出来
如:定义路由:
<Route path='/user/:data' component={UserPage}></Route>
- 使用:
var data = {id:3,name:sam,age:36};
data = JSON.stringify(data);
var path = `/user/${data}`;
1.<Link to={path}>用户</Link>
2.this.props.history.push(path);
- 获取数据:
var data = JSON.parse(this.props.params.id);
var {id,name,age} = data;
- 通过这种方式跳转到UserPage页面时只能通过传递字符串来传递参数,那么是否有其他方法来优雅地直接传递对象而不仅仅是字符串呢?
二.query And state
query 和 state 方式都是不以明文在url 上进行传递 可以传递对象但是 经过刷新之后不能获得之前传递的参数值
<Route path='/user' component={UserPage}></Route>
使用:
var data = {id:3,name:sam,age:36};
var path = {
pathname:'/user',
query:data,
}
1.<Link to={path}>用户</Link>
2.this.props.history.push(path);
获取数据:
var data = this.props.location.query;
var {id,name,age} = data;
state
<Route path='/user' component={UserPage}></Route>
- 使用:
var data = {id:3,name:sam,age:36};
var path = {
pathname:'/user',
state:data,
}
1.<Link to={path}>用户</Link>
2.this.props.history.push(path);
获取数据:
var data = this.props.location.state;
var {id,name,age} = data;