Vue.js 공식 문서를 보고 작성한 내용입니다.
그간 slot 의 존재는 알고 있었지만,
컴포넌트에 대한 이해력 부족으로 + 알아보기 귀찮음으로 학습을 하지 않고 미뤄왔던 내용 중 하나였다.
Slot
1. 간단하게 생각해서 버튼 내에 작성할 내용을 대체할 수 있다고 생각하면 편하다.
2. 좀 더 나아가서, 특정 태그 내에 특정 컴포넌트 등을 삽입할 수 있다.
// 1. slot 을 작성한 버튼 컴포넌트
<template>
<button type="submit">
<slot>this is replace context</slot>
</button>
</template>
// 2. 위에서 작성한 컴포넌트를 활용
<template>
<!-- slot에 작성하였던 내용을 그대로 노출하게 된다. -->
<SubmitButton />
<!-- 내가 작성한 내용이 있을 경우 slot이 대체된다. -->
<SubmitButton>저장할겁니다</SubmitButton>
</template>
// 또 다른 컴포넌트 생성
<template>
<div>
두 번째 컴포넌트입니다.
</div>
</template>
// 위에서 생성한 컴포넌트를 상위 컴포넌트에서 slot내에 추가
<SubmitButton>
<Comp />
저장할겁니다
</SubmitButton>
이렇게 새로운 컴포넌트를 생성하고,
Button 컴포넌트 slot 에 추가한 컴포넌트를 포함시킬 수 있습니다.
이상입니다.
해당 내용을 공부하다보니, 리액트에서 props로 내려주던 text 부분을 slot으로 교체가 가능하겠다는 생각에 도달하였다.
기존에 사용하던 props의 개수를 줄이고 좀 더 가변적이고 다양한 모습의 코드를 짜도록 노력해야겠다.
프로젝트 도중에 custom-emit 관련한 내용을 살펴보던 중 이렇게 slot을 발견하고 이해할 수 있어서 너무 다행이라는 생각이 듭니다.오늘도 하나 배워갑니더.
댓글 영역