如何防止 chrome 中的双重确认与反应中的 'onbeforeunload' 事件
How do I prevent double confirmation in chrome with 'onbeforeunload' events in react
我想提示人们在离开页面之前进行确认。
我在 componentDidMount 中添加了事件监听器:
componentDidMount() {
window.addEventListener('beforeunload', this.onUnload)
}
然后我写了我想要发生的事件:
onUnload(e) {
var message = "Random message to trigger the browser's native alert."
e.returnValue = message
return message
}
然后我在构造函数中绑定事件:
constructor(props) {
super(props)
this.onUnload = this.onUnload.bind(this)
}
最后我删除了卸载时的事件侦听器:
componentWillUnmount() {
window.removeEventListener('beforeunload', this.onUnload)
}
似乎一切正常。当我尝试关闭 chrome 中的选项卡时,出现以下提示:
问题是我在选择任一选项后也会收到重新加载提示:
如何摆脱第二个提示?我究竟做错了什么?
尝试在 onUnload
中添加一个 e.preventDefault()
您可以将 window.removeEventListener
移动到 onUnmount
方法以确保它被调用。所以这样的事情应该有效:
onUnload(e) {
window.removeEventListener('beforeunload', this.onUnload)
var message = "Random message to trigger the browser's native alert."
e.returnValue = message
return message
}
我想提示人们在离开页面之前进行确认。
我在 componentDidMount 中添加了事件监听器:
componentDidMount() {
window.addEventListener('beforeunload', this.onUnload)
}
然后我写了我想要发生的事件:
onUnload(e) {
var message = "Random message to trigger the browser's native alert."
e.returnValue = message
return message
}
然后我在构造函数中绑定事件:
constructor(props) {
super(props)
this.onUnload = this.onUnload.bind(this)
}
最后我删除了卸载时的事件侦听器:
componentWillUnmount() {
window.removeEventListener('beforeunload', this.onUnload)
}
似乎一切正常。当我尝试关闭 chrome 中的选项卡时,出现以下提示:
问题是我在选择任一选项后也会收到重新加载提示:
如何摆脱第二个提示?我究竟做错了什么?
尝试在 onUnload
中添加一个 e.preventDefault()您可以将 window.removeEventListener
移动到 onUnmount
方法以确保它被调用。所以这样的事情应该有效:
onUnload(e) {
window.removeEventListener('beforeunload', this.onUnload)
var message = "Random message to trigger the browser's native alert."
e.returnValue = message
return message
}