Next.js

Next.js + Materialデザインで、簡単に確認ダイアログを実装する(material-ui-confirm)

「Reactで確認ダイアログの実装すると、ダイアログのレイアウト作成から「OK」と「キャンセル」の、それぞれの処理を作成したりと手間がかかります。
またJavaScript標準の「confirm」ダイアログと同様の使用方法が無いかを探してたところ、「material-ui-confirm」を使う事がいいとありました。
実際に使ってみたところ、メッセージと「OK」「キャンセル」だけを表示するのであれば、「material-ui-confirm」を使うのがいいかと思われます。

環境

  • Mac Intel Ventura 13.1
  • TypeScript 4.9.5
  • Next.js 13.2.3
  • React 18.2.0
  • yarn 1.22.17
  • MUI 5.11.11
  • material-ui-confirm 3.0.8

実装方法

以下のコマンドから「material-ui-confirm」をインストールします。

$ yarn add material-ui-confirm

使用する場合、まずは「_app.tsx」に「ConfirmProvider」をインポートの処理を追加します。
そして「return」の箇所に「<ConfirmProvider>」で囲みます。

...省略
// 「ConfirmProvider」をインポートする。
import {ConfirmProvider} from 'material-ui-confirm';

...省略
    return (
        <ThemeProvider theme={theme}>
            {/* 「ConfirmProvider」を定義する */}
            <ConfirmProvider>
                <CssBaseline/>
                <Component {...pageProps} />
            </ConfirmProvider>
        </ThemeProvider>
    );

これで使用する準備が出来ました。
実際に使用する場合、ページを構築するプログラムで「useConfirm」をインポートします。
使用する場合は「React」の処理内で「useConfirm()」を呼び出して使用します。

...省略
// 「useConfirm」をインポートする。
import {useConfirm} from 'material-ui-confirm';

...省略
const Home: NextPage = () => {
    // 確認ダイアログを定義する
    const confirmDialog = useConfirm();

    // 確認ダイアログを表示する
    const handleClick = () => {
        confirmDialog(
            title: '削除',
            description: '削除してよろしいでしょうか?',
            cancellationText: 'キャンセル'
        )
        .then(() => {
            // 「OK」ボタン押下時の処理
            
        })
        .catch(() => {
            // 「Cancel」ボタン押下時の処理

        });
    };

    // ボタン押下時に確認ダイアログを表示する
    return <Button onClick={handleClick}>Click</Button>;
}

上記のように、呼び出した「useConfirm」を使用する場合、オプションを設定します。
OK」ボタン押下時には「then()」の中で処理を行い、「キャンセル」の場合は「catch()」の中で処理を記述します。
使用するオプションは以下のURLの「Options」を参照してください。

https://www.npmjs.com/package/material-ui-confirm

通常のメッセージダイアログを表示する

確認ダイアログではなく、通常のメッセージダイアログとして使用する場合はオプションに「hideCancelButton」に「true」を設定します。

confirmDialog({
            title: '削除完了',
            description: '削除完了しました。',
            hideCancelButton: true
        })
            .then(() => {
               // 「OK」押下時の処理

            });

今回の記事では「Next.js」のプロジェクトで使用しておりましたが、普通の「React」でも使用出来ます。
「MUI」を組み込んでるプロジェクトでは「material-ui-confirm」を使用して行くと楽に実装出来るはずです。