スロットの基本 <slot />
Svelte コンポーネントを使用するときに子要素として渡した内容は、Svelte コンポーネントの中から <slot />
で参照することができます。
<slot />
の仕組みは、Vue.js や Astro でも採用されています(React.js では children
prop で参照します)。
次の ExtLink
コンポーネントは、外部サイトへのリンクを表示するコンポーネントの実装例です。
この ExtLink
コンポーネントは次のように使用します。
この例では、コンポーネント内の <slot />
という部分に Bing
というテキストが展開されることになります。
よって、リンク部分は次のような HTML にコンパイルされます。
<a href="https://www.bing.com/" target="_blank" rel="noopener noreferrer">Bing</a>
名前付きスロット <slot name=“name” />
子要素を複数のパートに分けてコンポーネントに渡したいことがあります。
このような場合は、名前付きスロット という仕組みを使います。
次の Box
コンポーネントは、3 つのスロットを受け取れるようにしています。
header
という名前のスロット- 名前なしスロット
footer
という名前のスロット
この Box
コンポーネントを使うときは、次のように何らかの要素の slot
prop でどのスロットに子要素を渡すかを指定します。
これで目的は達成されているように見えるのですが、名前付きスロットを使うときに slot
prop を指定するための余計な div
要素が追加されています。
余計な div
要素を追加しないようにするには、代わりに svelte:fragment
という要素を使います。
関連記事