一、react-router
3-1 安装依赖
yarn add react-router-dom
3-1 配置路由
App.js
import React, { Component } from 'react';
import {
BrowserRouter as Router,
Switch,
Route,
Link
} from "react-router-dom";
import Home from './views/Home'
import About from './views/About'
class App extends Component {
render() {
return (
<div>
<Router>
<ul>
<li><Link to="/">首页</Link></li>
<li><Link to="/about">About</Link></li>
</ul>
{/* exact路由的严格匹配,只有路径为/才会加载对应的路由 */}
<Switch>
<Route exact path="/" component={Home}></Route>
<Route path="/about" component={About}></Route>
<Route path="/about/fs" component={About}></Route>
</Switch>
</Router>
</div>
);
}
}
export default App;
二、路由跳转和get传值
2-1 Link
class Home extends Component {
constructor(props){
super(props);
this.state = {
id:1001
}
}
render() {
return (
<div>
主页
<Link to={`/detail?id=${this.state.id}`}>
<Button>detail</Button>
</Link>
</div>
);
}
}
2-2 事件跳转 this.props.history.push()
<Button onClick={this.handleToggle}>detail</Button>
handleToggle=()=>{
this.props.history.push(`/detail?id=${this.state.id}`)
}
2-3 query-string解析get传值
//Detail.js
//this.props.location.search
//安装依赖
yarn add query-string
import queryString from 'query-string'
class Detail extends Component {
...
componentDidMount() {
var url = this.props.location.search;
console.log(queryString.parse(url))
}
}
export default Detail;
三、动态路由
5-1 配置动态路由
<Route path="/detail/:id" component={Detail}></Route>
5-2 跳转
<Button onClick={this.handleToggle}>detail</Button>
handleToggle=()=>{
this.props.history.push(`/detail/${this.state.id}`)
}
5-3 详情页接收 this.props.match.params
componentDidMount() {
console.log(this.props.match.params)
}