使用法

アプリケーションのルートで、SlotとFillのレンダリングを調整するSlotFillProviderをレンダリングする必要があります。

次に、アプリケーションの任意の場所にSlotコンポーネントをレンダリングし、名前を付けます。

どのFillも、アプリケーション内の他の場所でレンダリングされていても、このSlotスペースを自動的に占有します。

Fillコンポーネントを直接使用するか、以下の例のようにスロット名を消費者の認識から抽象化するラッパーコンポーネントタイプを使用できます。

  1. import {
  2. SlotFillProvider,
  3. Slot,
  4. Fill,
  5. Panel,
  6. PanelBody,
  7. } from '@wordpress/components';
  8. const MySlotFillProvider = () => {
  9. const MyPanelSlot = () => (
  10. <Panel header="Panel with slot">
  11. <PanelBody>
  12. <Slot name="MyPanelSlot" />
  13. </PanelBody>
  14. </Panel>
  15. );
  16. MyPanelSlot.Content = () => <Fill name="MyPanelSlot">Panel body</Fill>;
  17. return (
  18. <SlotFillProvider>
  19. <MyPanelSlot />
  20. <MyPanelSlot.Content />
  21. </SlotFillProvider>
  22. );
  23. };

対応するSlotおよびFillコンポーネントを一致させるプロセスを簡素化するために作成されたcreateSlotFillヘルパーメソッドもあります:

  1. const { Fill, Slot } = createSlotFill( 'Toolbar' );
  2. const ToolbarItem = () => <Fill>My item</Fill>;
  3. const Toolbar = () => (
  4. <div className="toolbar">
  5. <Slot />
  6. </div>
  7. );

プロパティ

  1. `````Slot`````および`````Fill`````は、`````name`````文字列プロパティを受け入れ、指定された`````name`````を持つ`````Slot`````が、関連する`````Fill``````````children`````をレンダリングします。
  2. `````Slot`````は、イベントバブリングの動作を変更する`````bubblesVirtually`````プロパティを受け入れます:
  3. - デフォルトでは、イベントはDOM階層の親にバブリングします(ネイティブイベントバブリング)
  4. - `````bubblesVirtually`````trueに設定されている場合、イベントはReact要素階層内の仮想親にバブリングします。
  5. `````Slot`````は、`````bubblesVirtually`````trueに設定されている場合、スロットコンテナに追加するためのオプションの`````className`````および`````style`````プロパティも受け入れます。
  6. `````Slot````` **なし**の`````bubblesVirtually`````は、`````fills`````をパラメータとして受け取るオプションの`````children`````関数プロパティを受け入れます。これにより、追加の処理を行い、`````fills`````を条件付きでラップできます。
  7. *例*:
  8. ``````bash
  9. const Toolbar = ( { isMobile } ) => (
  10. <div className="toolbar">
  11. <Slot name="Toolbar">
  12. { ( fills ) => {
  13. return isMobile && fills.length > 3 ? (
  14. <div className="toolbar__mobile-long">{ fills }</div>
  15. ) : (
  16. fills
  17. );
  18. } }
  19. </Slot>
  20. </div>
  21. );
  22. `

プロパティは、SlotからFillfillPropsプロパティを使用して渡すこともできます:

  1. const { Fill, Slot } = createSlotFill( 'Toolbar' );
  2. const ToolbarItem = () => (
  3. <Fill>
  4. { ( { hideToolbar } ) => {
  5. <Button onClick={ hideToolbar }>Hide</Button>;
  6. } }
  7. </Fill>
  8. );
  9. const Toolbar = () => {
  10. const hideToolbar = () => {
  11. console.log( 'Hide toolbar' );
  12. };
  13. return (
  14. <div className="toolbar">
  15. <Slot fillProps={ { hideToolbar } } />
  16. </div>
  17. );
  18. };