「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」を使用して行くと楽に実装出来るはずです。