View on Storybook
View source on GitHub
Import
import { Slot } from '@wordpress/components';
Examples
Default
const Default = ( props ) => {
return (
<SlotFillProvider>
<h2>Profile</h2>
<p>
Name: <Slot { ...props } name="name" />
</p>
<p>
Age: <Slot { ...props } name="age" />
</p>
<Fill name="name">Grace</Fill>
<Fill name="age">33</Fill>
</SlotFillProvider>
);
};
With Fill Props
const WithFillProps = ( props ) => {
return (
<SlotFillProvider>
<h2>Profile</h2>
<p>
Name:{ ' ' }
<Slot
{ ...props }
name="name"
fillProps={ { name: 'Grace' } }
/>
</p>
<p>
Age: <Slot { ...props } name="age" fillProps={ { age: 33 } } />
</p>
<Fill name="name">{ ( fillProps ) => fillProps.name }</Fill>
<Fill name="age">{ ( fillProps ) => fillProps.age }</Fill>
</SlotFillProvider>
);
};
With Slot Children
const WithSlotChildren = ( props ) => {
return (
<SlotFillProvider>
<h2>Profile</h2>
<p>
Name:
{ /* @ts-expect-error Not supported children for `<Slot />` when `bubblesVirtually` is true. */ }
<Slot { ...props } name="name">
{ ( fills ) => {
return (
<span style={ { color: 'red' } }>{ fills }</span>
);
} }
</Slot>
</p>
<p>
Age:
{ /* @ts-expect-error Not support children for `<Slot />` when `bubblesVirtually` is true. */ }
<Slot { ...props } name="age">
{ ( fills ) => {
return (
<span style={ { color: 'red' } }>{ fills }</span>
);
} }
</Slot>
</p>
<Fill name="name">Alice</Fill>
<Fill name="age">18</Fill>
</SlotFillProvider>
);
};
With Context
const WithContext = ( props ) => {
const Context = createContext< string | number >( '' );
const ContextFill = ( { name }: { name: string } ) => {
const value = useContext( Context );
return <Fill name={ name }>{ value }</Fill>;
};
return (
<SlotFillProvider>
<h2>Profile</h2>
<p>
Name: <Slot { ...props } name="name" />
</p>
<p>
Age: <Slot { ...props } name="age" />
</p>
<Context.Provider value="Grace">
<ContextFill name="name" />
</Context.Provider>
<Context.Provider value={ 33 }>
<ContextFill name="age" />
</Context.Provider>
</SlotFillProvider>
);
};