使用法
ConfirmDialog
には、主に制御モードと非制御モードの2つの暗黙のモードがあります。
非制御モード
コンポーネントをスタンドアロンで使用できるようにし、他のReactコンポーネントのレンダーメソッドの一部として宣言するだけで済みます:
- マウント時に自動的に開きます(表示されます);
- キャンセルボタンをクリックするか、
ESC
キーを押すか、ダイアログのフォーカスの外をクリックすることで自動的に閉じます(つまり、オーバーレイ); onCancel
は必須ではありませんが、渡すことができます。渡された場合でも、ダイアログは自動的に閉じることができます。
このモードを有効にするのは、isOpen
プロパティを省略するだけで簡単です。この場合、唯一の必須プロパティはonConfirm
コールバックです。メッセージはchildren
として渡されます。任意のJSXを渡すことができ、メッセージをさらにフォーマットしたり、サブコンポーネントを含めたりすることができます:
import { __experimentalConfirmDialog as ConfirmDialog } from '@wordpress/components';
function Example() {
return (
<ConfirmDialog onConfirm={ () => console.debug( ' Confirmed! ' ) }>
Are you sure? <strong>This action cannot be undone!</strong>
</ConfirmDialog>
);
}
制御モード
親コンポーネントがダイアログの開閉を制御できるようにします。isOpen
にブール値が渡されると有効になります:
- 自動的には閉じません。
isOpen
プロパティの値を更新することで、開閉のタイミングを知らせる必要があります; - このモードでは、
onConfirm
とonCancel
のコールバックは必須のプロパティです; onCancel
およびonConfirm
コールバックから更新することで、isOpen
を制御する状態を更新する必要があります。
import { useState } from 'react';
import { __experimentalConfirmDialog as ConfirmDialog } from '@wordpress/components';
function Example() {
const [ isOpen, setIsOpen ] = useState( true );
const handleConfirm = () => {
console.debug( 'Confirmed!' );
setIsOpen( false );
};
const handleCancel = () => {
console.debug( 'Cancelled!' );
setIsOpen( false );
};
return (
<ConfirmDialog
isOpen={ isOpen }
onConfirm={ handleConfirm }
onCancel={ handleCancel }
>
Are you sure? <strong>This action cannot be undone!</strong>
</ConfirmDialog>
);
}
サポートされていない: 複数のインスタンス
複数のConfirmDialog
は、現在このコンポーネントで公式にサポートされていないエッジケースです。現時点では、新しいインスタンスがModal
の実装方法のために最後のインスタンスを閉じることになります。
カスタムタイプ
type DialogInputEvent =
| KeyboardEvent< HTMLDivElement >
| MouseEvent< HTMLButtonElement >;
プロパティ
title: string
- 必須: いいえ
ダイアログのためのオプションのtitle
。タイトルを設定すると、ダイアログの上部にタイトルバーが表示され、少し高さが増します。このバーには、右上隅にx
の閉じるボタンも含まれます。
children: React.ReactNode
- 必須: はい
ダイアログの実際のメッセージです。子要素として渡され、任意の有効なReactNode
が受け入れられます:
<ConfirmDialog>
Are you sure? <strong>This action cannot be undone!</strong>
</ConfirmDialog>
isOpen: boolean
- 必須: いいえ
ダイアログが開いている(表示されている)か、閉じている(レンダリングされていない/表示されていない)かを定義します。また、設定されている場合は制御モードを暗黙的に切り替え、設定されていない場合は非制御モードを切り替えます。
onConfirm: ( event: DialogInputEvent ) => void
- 必須: はい
ユーザーが確認したときに呼び出されるコールバックです。確認は、OK
ボタンがクリックされたときや、Enter
が押されたときに発生します。
onCancel: ( event: DialogInputEvent ) => void
- 必須:
isOpen
が設定されていない場合のみ
ユーザーがキャンセルしたときに呼び出されるコールバックです。キャンセルは、Cancel
ボタンがクリックされたとき、ESC
キーが押されたとき、またはダイアログのフォーカスの外をクリックしたときに発生します(つまり、オーバーレイ内)。
isOpen
が設定されていない場合(非制御モード)では必須ではありません。コンポーネントは自動的に閉じるためですが、キャンセル時に何かを行う必要がある場合はコールバックを渡すことができます(この場合でもコンポーネントは自動的に閉じます)。
isOpen
が設定されている場合(制御モード)、それは必須であり、ユーザーがキャンセルしたときにダイアログを閉じるためにisOpen
をfalse
として定義する状態を設定する必要があります。
confirmButtonText: string
- 必須: いいえ
- デフォルト: “OK”
確認ボタンのラベルとして表示するオプションのカスタムテキスト
cancelButtonText: string
- 必須: いいえ
- デフォルト: “キャンセル”
キャンセルボタンのラベルとして表示するオプションのカスタムテキスト
ベストプラクティス
ConfirmDialogコンポーネントは次のようにすべきです:
- キャンセルと確認のアクションが提供される短い確認メッセージのみに使用されるべきです。
- 確認ボタンには説明的なテキストを使用してください。デフォルトは「OK」です。