在react 中使用react-router-dom
使用react-router-dom 进行路由的配置 首先进行安装react-router-dom
npm install react-router-dom --save-dev //这里可以使用cnpm代替npm命令
为了方便使用最好先搭建起一个项目可以使用react脚手架(如果不了解 可以参考这个文章脚手架搭建)
1.搭建页面
在页面中新建两个组件
detail.js
import React from 'react'
export default class Detail extends React.Component {
render() {
return(
<div>
<p> 去home页面</p>
</div>
)
}
}
home.js
import React from 'react'
export default class Home extends React.Component {
constructor(props) {
super(props)
}
render() {
return (
<div>
<p > 去detail页面</p>
</div>
)
}
}
2.路由适配
把两个页面放到路由中新建router.js页面
import React from 'react'
import Home from "./home"
import Detail from './detail'
import { HashRouter as Router, Route, Switch } from 'react-router-dom'
function basicRoute() {
return (
<Router>
<Switch>
<Route exact path='/' component={Home} />
<Route exact path='/detail' component={Detail} />
</Switch>
</Router>
)
}
export default basicRoute
3.放入入口文件
在我们搭建好的脚手架中有一个入口文件index.js
import React from 'react';
import ReactDOM from 'react-dom';
import Router from './router/router'
ReactDOM.render(
<Router />,
document.getElementById('root')
);
之后就可以yarn start启动项目看到页面了 http://localhost:3000/#/和http://localhost:3000/#/detail
通过函数跳转点击按钮进行跳转
export default class Home extends React.Component {
constructor(props) {
super(props);
}
render() {
return (
<div>
<a href='#/detail'>去detail</a>
<button onClick={() => this.props.history.push('detail')}>通过函数跳转</button>
</div>
)
}
}
通过路由传参
- 使用url进行传递参数在router.js中进行修改
<Route exact path="/detail/:id" component={Detail}/>
在detail.js页面中可以获取链接中的ID
import React from 'react'
export default class Detail extends React.Component {
componentDidMount() {
console.log(this.props.match.params, "======")
}
render() {
return (
<div>
<p> 去home页面</p>
</div>
)
}
}
隐式进行传递参数
router.js 恢复原样
<Route exact path='/detail' component={Detail} />
home.js
import React from 'react'
export default class Home extends React.Component {
constructor(props) {
super(props)
}
render() {
return (
<div>
<p> 去detail页面</p>
<button onClick={() => this.props.history.push({
pathname: '/detail',
state: {
id: 6
}
})}>通过函数跳转</button>
</div>
)
}
}//新增加button按钮事件
点击按钮跳转到detail页面 通过this.props.history.location.state 可以拿到state里面的ID
import React from 'react'
export default class Detail extends React.Component {
componentDidMount() {
console.log(this.props.history.location.state, "======")
}
render() {
return (
<div>
<p> 去home页面</p>
</div>
)
}
}
兄弟组件路由隐式传参 this.props.history.location.state
获取路由上的参数 this.props.match.params