3 回答
TA贡献1813条经验 获得超2个赞
react-routerv4引入了一种使用阻止导航的新方法Prompt。只需将其添加到您要阻止的组件中即可:
import { Prompt } from 'react-router'
const MyComponent = () => (
<React.Fragment>
<Prompt
when={shouldBlockNavigation}
message='You have unsaved changes, are you sure you want to leave?'
/>
{/* Component JSX */}
</React.Fragment>
)
这将阻止所有路由,但不会阻止页面刷新或关闭。要阻止它,您需要添加以下内容(根据需要使用相应的React生命周期进行更新):
componentDidUpdate = () => {
if (shouldBlockNavigation) {
window.onbeforeunload = () => true
} else {
window.onbeforeunload = undefined
}
}
onbeforeunload具有浏览器的各种支持。
TA贡献1878条经验 获得超4个赞
对于react-router2.4.0+
注意:建议将所有代码迁移到最新版本,react-router以获取所有新功能。
按照react-router文档中的建议:
一个应该使用withRouter更高阶的组件:
我们认为,这种新的HoC更好,更轻松,并且将在文档和示例中使用它,但这并不是转换的硬性要求。
作为文档中的ES6示例:
import React from 'react'
import { withRouter } from 'react-router'
const Page = React.createClass({
componentDidMount() {
this.props.router.setRouteLeaveHook(this.props.route, () => {
if (this.state.unsaved)
return 'You have unsaved information, are you sure you want to leave this page?'
})
}
render() {
return <div>Stuff</div>
}
})
export default withRouter(Page)
添加回答
举报