🎨 ブロックオーバーライドガイド
✨ 概要
CreateOrganization
コンポーネントは、ブロックオーバーライドを通じて強力なカスタマイズ機能を提供します。このパターンにより、基本的な機能を維持しながら、フォーム構造、バリデーションロジック、UIコンポーネントを完全にカスタマイズできます。
🚀 基本的なオーバーライドパターン
<CreateOrganization onCreateOrganization={handleSubmit}>
{({defaultBlocks, defaultBlockOrder}) => ({
blocks: {
...defaultBlocks,
// ここで特定のブロックをオーバーライド
},
blockOrder: defaultBlockOrder
})}
</CreateOrganization>
🔧 完全なカスタマイズ例
日本の組織登録における高度な実例:
ライブエディター
<CreateOrganization onCreateOrganization={(formData) => { // フォームデータを処理 console.log(formData); }}> {({defaultBlocks, defaultBlockOrder}) => ({ blocks: { ...defaultBlocks, // 🎯 カスタムタイトル title: { ...defaultBlocks.title, props: { ...defaultBlocks.title.props, children: 'タイトル', }, }, // 📝 完全なコンポーネントオーバーライドでリッチな説明 description: <p style={{color: 'black'}}>説明</p>, // 🏢 複雑なフォームオーバーライド form: { ...defaultBlocks.form, props: { ...defaultBlocks.form.props, children({defaultBlocks, defaultBlockOrder}) { return { blocks: { companyInformation: { ...defaultBlocks.companyInformation, props: { ...defaultBlocks.companyInformation.props, children({defaultBlocks}) { return { blocks: { // 事前入力された値を持つカスタム会社名 companyName: <p style={{color: 'black'}}>カスタムブロック</p>, // バリデーション付きの会社説明 additionalInformation: { ...defaultBlocks.additionalInformation, props: { ...defaultBlocks.additionalInformation.props, name: 'description', label: '説明', isRequired: true, placeholder: `説明を入力してください`, }, }, }, blockOrder: [ 'companyName', 'additionalInformation' ], }; }, }, }, // カスタム送信ボタン submitButton: { ...defaultBlocks.submitButton, props: { ...defaultBlocks.submitButton.props, children: "送信", }, }, }, blockOrder: defaultBlockOrder, }; }, }, }, }, blockOrder: defaultBlockOrder, })} </CreateOrganization>
結果
Loading...
🎯 主要なオーバーライド概念
1. ブロックオーバーライド構造
blocks
: コンポーネント定義を含むオブジェクトblockOrder
: レンダリング順序を制御する配列defaultBlocks
: 元のコンポーネント構造defaultBlockOrder
: 元のレンダリング順序
2. 入れ子のオーバーライド
form: {
...defaultBlocks.form,
props: {
...defaultBlocks.form.props,
children({defaultBlocks, defaultBlockOrder}) {
// ここで入れ子のブロックオーバーライド
}
}
}
3. カスタムコンポーネント
デフォルトブロックを完全にカスタムコンポーネントに置き換え:
customField: <MyCustomComponent {...props} />
📐 ベストプラクティス
- 常にデフォルトpropsをスプレッドして既存の機能を維持
- 意味のあるブロック名を使用してメンテナンス性を向上
- blockOrderの一貫性を維持(意図的に順序を変更する場合を除く)
- カスタムフィールドに適切なバリデーションを実装
- ローディングとエラー状態を適切に処理
🚀 利点
- 🎨 完全なUI制御: フォームのあらゆる側面をカスタマイズ
- 🔧 柔軟なバリデーション: カスタムバリデーションロジックの実装
- 📱 レスポンシブデザイン: レスポンシブ動作の維持
- 🔄 状態管理: フォーム状態の完全な制御
プロのヒント: 小さなオーバーライドから始めて、徐々に複雑さを構築しましょう。ブロックオーバーライドパターンは強力ですが、propsのスプレッドとコンポーネント構造に細心の注意が必要です。