NextJs 入力離脱時のダイアログ表示について
どなたか知見あれば教えていただきたいです。
現在、Nextjs(Reactフレームワーク)を使用して、TODOアプリを作成しています。
実現したいこと
入力フォームに文字を入力している状態で、
ブラウザバックボタン(Chromeの戻るボタン)を押した際に、
入力離脱ダイアログを表示させたいです。
ブラウザに標準で備わっている、「window.alert, window.confirm」などのダイアログは使用せず、
オリジナルで作ったダイアログを表示させたいです(細かいですが、そういったところにこだわりたいです)。
以下のように書くと実現はできるのですが(ネットでよくあるブラウザバック検知のやつです)、問題があります。
sample.tsx
1// 入力フォームのステート 2const [inputs, setInputs] = useState<string>(''); 3 4// ダイアログの開閉ステート 5const [isOpen, setIIsOpen] = useState<boolean>(false); 6 7useEffect(() => { 8 if (inputs !== ''){ 9 history.popstate(null, '', location.href); 10 }; 11 12 const check = (e: any) => { 13 e.preventDefault(); 14 history.popstate(null, '', location.href); 15 setIsOpen(!isOpen); 16 }; 17 addEventLisner('popstate', check); 18 19 return () => { 20 removeEventLisner('popstate', open); 21 }; 22});
mondaiten:問題点
1入力 ⇨ フォームの入力データを消す ⇨ ブラウザバックボタンを押す ⇨ history.popstateで履歴を更新してしまっているためブラウザバックが効かない 2 3入力を消すとhistoryの情報を元に戻すみたいなことをすればいけるはずですが、現状できそうにもありません
どなたかブラウザバックに詳しい方いましたら、教えていただきたいです。
また、物理的に無理であれば、ブラウザバック時の確認ダイアログで使われるような「ライブラリ」等はないでしょうか??
ご教授いただければ幸いです。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/03/17 13:37