2017-05-07 126 views
3

我试图在我的应用中实现一项功能,当用户尝试从未提交的表单导航时,他们会得到一个确认,询问他们是否确定要在保存更改前离开。如何防止在React组件中卸载?

componentWillUnmount方法似乎是这样,因为它会火为所有用户可以抛弃形式的各种方法完美的候选人(改变,导致它消失父组件状态,导航到不同的路线,等...)。但是...当确认返回错误时,我无法阻止卸载。

关于如何实现这一点的任何建议?

+0

的可能的复制[?我如何防止卸载/重新安装一个组分反应(http://stackoverflow.com/问题/ 33151563/how-can-i-prevent-react-from-unmounting-remounting-a-component) – orvi

+0

我相信你可以使用['window.beforeunload'](https://developer.mozilla.org/ en-US/docs/Web/Events/beforeunload)功能 –

+0

不,你不能!您只更新视图上的组件!只有当你更新浏览器路由时,我们才会工作,而不是# –

回答

3

这最好通过react-router:setRouteLeaveHook来处理。

componentWillMount() { 
    this.unregisterLeaveHook = props.router.setRouteLeaveHook(props.route, this.routerWillLeave.bind(this)); 
} 

routerWillLeave(nextLocation) { 
    return false;   
} 

当组件卸载,注销假钩:

componentWillUnmount() { 
    this.unregisterLeaveHook(); 
} 
+0

我刚刚看到类似的东西,谢谢你的回答,它对我很好 –

0

我不会推荐在componentWillUnmount中这样做。我通常希望在商店中做到这一点(如果您使用的是流量架构)。通常需要跟踪所有数据的商店。 componentWillUnmount函数是你想要卸载存储监听器的。

+0

**恶魔**,实际上我发现了其他方式来实现我想要的,这是正确的,它不使用** componentWillUnmount **。感谢您的回答。 –

+0

没问题。 :) aa – Demon

+1

你用什么解决方案? –

相关问题