阻止React router跳转:
1、React不像Vue那样有router.beforeEach这样的路由钩子,但是它提供了一个组件:Prompt
import { Prompt } from 'react-router-dom'; <Prompt when={true} message={location => '信息还没保存,确定离开吗?'} />
在React跳转路由的时候,Prompt就会触发
2、我们可用withrouter把histroy注入props,用history.block
let isNeedBlock = true; const unBlock = props.history.block(() => { if (isNeedBlock) { return '信息还没保存,确定离开吗?'; } return unBlock(); });
阻止页面关闭、刷新
但是这个没法阻止刷新和关闭,这个时候我们用beforeunload事件
class Test extends React.Component { componentDidMount() { this.init(); window.addEventListener('beforeunload', this.beforeunload); } componentWillUnmount = () => { window.removeEventListener('beforeunload', this.beforeunload); }; beforeunload = (ev: any) => { if (ev) { ev.returnValue = ''; } }; render() { return <div>...</div> } }