FrontEnd/Svelte
[Svelte] Svelte 기본문법 #3 (Slot)
js-web
2024. 1. 17. 11:26
반응형
Slot이란?
- 공통 레이아웃을 가진 Component에 props 데이터 이외에 마크업을 전달해서 렌더링 시켜야할 때 Slot을 사용할 수 있다.
- 형태 : <slot></slot>
1) 사용법
// Card.svelte
<div class="card">
<slot></slot>
</div>
// main.svelte
import Card from './Card.svelte';
...
<Card> // Card 컴포넌트 내부 Slot에 매핑될 Html 형태의 내용을 입력한다.
<h2> 안녕하세요. </h2>
<p> 반갑습니다.</p>
</Card>
2) 이름이 있는 Slot
// Card.svelte
<div class="card"> //name 속성으로 slot에 이름을 지정
<slot name="introduce"></slot>
<slot name="card_name"></slot>
</div>
// main.svelte
import Card from './Card.svelte';
...
<Card>
<div slot="introduce"> // slot 속성으로 매핑할 slot name을 입력
<h2> 안녕하세요. </h2>
<p> 반갑습니다.</p>
</div>
<div slot="card_name">
<p> 청첩장 </p>
</div>
</Card>
3) $$slots - 슬롯 사용여부
// Card.svelte
<div class="card">
{#if $$slots.email} // email 이름의 슬롯 사용여부 체크
<slot name="email"></slot>
{/if}
</div>
// main.svelte
import Card from './Card.svelte';
...
<Card>
...
<div slot="email">
<p> email@email.com </p>
</div>
</Card>
4) Flagment
- 의미없는 div 태그 사용으로 css의 오동작 이슈가 생길 경우 flagment 태그 활용
<svelte:fragment slot="footer">
<p> test </p>
</svelte:fragment>
반응형