我试图在我的应用中实现一项功能,当用户尝试从未提交的表单导航时,他们会得到一个确认,询问他们是否确定要在保存更改前离开。如何防止在React组件中卸载?
的componentWillUnmount方法似乎是这样,因为它会火为所有用户可以抛弃形式的各种方法完美的候选人(改变,导致它消失父组件状态,导航到不同的路线,等...)。但是...当确认返回错误时,我无法阻止卸载。
关于如何实现这一点的任何建议?
我试图在我的应用中实现一项功能,当用户尝试从未提交的表单导航时,他们会得到一个确认,询问他们是否确定要在保存更改前离开。如何防止在React组件中卸载?
的componentWillUnmount方法似乎是这样,因为它会火为所有用户可以抛弃形式的各种方法完美的候选人(改变,导致它消失父组件状态,导航到不同的路线,等...)。但是...当确认返回错误时,我无法阻止卸载。
关于如何实现这一点的任何建议?
这最好通过react-router:setRouteLeaveHook来处理。
componentWillMount() {
this.unregisterLeaveHook = props.router.setRouteLeaveHook(props.route, this.routerWillLeave.bind(this));
}
routerWillLeave(nextLocation) {
return false;
}
当组件卸载,注销假钩:
componentWillUnmount() {
this.unregisterLeaveHook();
}
我刚刚看到类似的东西,谢谢你的回答,它对我很好 –
我不会推荐在componentWillUnmount中这样做。我通常希望在商店中做到这一点(如果您使用的是流量架构)。通常需要跟踪所有数据的商店。 componentWillUnmount函数是你想要卸载存储监听器的。
**恶魔**,实际上我发现了其他方式来实现我想要的,这是正确的,它不使用** componentWillUnmount **。感谢您的回答。 –
没问题。 :) aa – Demon
你用什么解决方案? –
的可能的复制[?我如何防止卸载/重新安装一个组分反应(http://stackoverflow.com/问题/ 33151563/how-can-i-prevent-react-from-unmounting-remounting-a-component) – orvi
我相信你可以使用['window.beforeunload'](https://developer.mozilla.org/ en-US/docs/Web/Events/beforeunload)功能 –
不,你不能!您只更新视图上的组件!只有当你更新浏览器路由时,我们才会工作,而不是# –