ページを離れる前に確認を求めます。反応の 'onbeforeunload'イベントでクロムの二重確認を防止するには
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)
}
すべてうまくいくようです。私がしようとクロムでタブを閉じるとき、私は次のプロンプトを取得します:
problmeは、私はどちらかのオプションを選択した後、私はまた、リロードプロンプトを取得していることです2番目のプロンプト?私は間違って何をしていますか? e.preventDefaultを(追加
'removeEventListener'を' onUnload'に入れるとどうなりますか?あなたのケースでは 'componentWillUnmount'が呼び出されないかもしれません。 – DonovanM
@DonovanM私はちょうどそれにショットと運を与えた。前と同じ動作。私はあなたが意味すると仮定します... onUnload(e){ e.preventDefault(); var message = "ブラウザのネイティブアラートをトリガーするランダムメッセージです。"; e.returnValue = message; 返信メッセージwindow.removeEventListener( 'beforeunload'、this.onUnload); } 'コンソールログをunmountに投げてあなたのポイントをテストしましたが、それは発砲しているようです。ありがとう、結構です。それは有り難いです。 –
'window.removeEventListener'は' return message'の前になければなりません。 return文の後のものは実行されません。しかし、あなたがアンマウントが正しく発射していると言いましたので、残念ながら、これはあまり役に立たないでしょう:( – DonovanM