【React】window.confirmの代替となるPromiseな確認ダイアログを自作する
ブラウザ標準ではなく任意のUIで確認ダイアログを実装したい場面があったので、今回はwindow.confirm()
のようにメインスレッドをブロックするモーダルをReact Hooksを利用して実装してみる。
1. カスタムフックを実装
2. モーダルを実装
ClickEvent
などをトリガーとして開くイベント駆動のものではなく、最初から開いているモーダルを実装する。
またEsc
キーを押下して閉じされることを考慮してonClose
を引数として受け付けるようにする。
3. ConfirmButtonを実装
先ほど実装したuseConfirm
フックを利用し、モーダル内のCancelボタンをクリックするとreject()
、OKボタンをクリックするとresolve()
を実行する。
そうすることでモーダル内のボタンを押下を待ち、押下後にalert()
が実行されるようになる。
参考