react-router 离开路由前确认
react路由在做离开前确认时,有两种方法
第一种是我们写的是动态路由,可以做一个简单的离开前确认
path: '/association/administration', component: Administration, childRoutes: [ { path: '/association/administration/basicInfo/:id', getComponent(location, cb) { require.ensure([], require => { const ARList = require('./components/basicInfo/action-reducer.js'); const compKey = 'adminActivity'; injectReducer(compKey, ARList.reducerList); const activityContainer = require('./components/basicInfo/container.js').default; cb(null, activityContainer); }); } onLeave() { // 在路由离开时触发此方法 }, onEnter(nextState, replace) { // 在进入路由前触发此方法 } }
这个函数是很好,但是有一个问题,无法获取到组件里的值,无法通过组建里的状态来触发,我个人认为不是很好
那么另外一个方法是什么呢
import React, {Component} from 'react';
import {withRouter} from 'react-router';
export default withRouter(class extends Component {
state = {
unsaved: true
}
componentDidMount() {
this.props.router.setRouteLeaveHook(this.props.route, () => {
if (this.state.unsaved) {
if(confirm('确定要离开吗')) {
return true
} else {
return false
}
}
})
}
render() {
return (
<div>
<h2>About</h2>
路由跳转前确认
</div>
)
}
})
这个方法必须要在react-router 2.4.x 以上的版本才有 withRouter 方法,这样就可以做路由确认前的跳转,还可以获取到组件里的方法,通过组件状态来判断是否要触发
浙公网安备 33010602011771号