[Vue.js] v-slot으로 컴포넌트 효율적으로 사용하기

2023. 9. 25. 17:29· Vue.js
목차
  1. [들어가기 전에]
  2. [v-slot]
  3. [v-slot 언제 사용할까?]

[들어가기 전에]

화면을 개발할 때 전체적인 디자인은 퍼블리셔가 만들어주기 때문에 template를 그대로 가져와 사용했습니다.

그러다 보니 v-slot이 정확히 무슨 역할을 하는지 자세히 모르고 사용하였는데요...!

 

그래서 오늘은 v-slot이 무엇인지, 언제 사용하면 좋을지... 에 대해서 알아보겠습니다 👀

[v-slot]

먼저 slot은 '어떤 자리에 무언가를 넣는다'라는 의미입니다.

그리고 v-slot은 '부모 컴포넌트가 자식 컴포넌트에 콘텐츠를 주입하고 데이터를 전달한다'라는 의미입니다.

어떤 자리 = 자식 컴포넌트
무언가 = 콘텐츠 or 데이터

라고 생각하면 왜 v-slot이라고 명명했는지 이해가 쉽겠죠?!

 

원래는 slot과 slot-scope가 존재했는데 2.6.0 버전에서 이를 통합한 v-slot이 등장했다고 해요. 그 이유는 slot-scope의 배치가 실제로 scope 변수를 제공하는 component를 명확하게 반영하지 않기 때문입니다.

https://github.com/vuejs/rfcs/blob/master/active-rfcs/0001-new-slot-syntax.md

 

예시를 통해 어떻게 사용하는지 알아보겠습니다.

📌 이름이 있는 슬롯

<template>
  <div>
    <ChildComponent>
      <template v-slot:left>
        <button>부모 왼쪽 버튼</button>
      </template>

      <template v-slot:right>
        
      </template>
    </ChildComponent>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue'

export default {
  components: {
    ChildComponent
  }
}
</script>
<template>
  <div>
      <slot name="left"><button>자식 왼쪽 버튼</button></slot>
      <slot name="right"><button>자식 오른쪽 버튼</button></slot>
  </div>
</template>

자식 컴포넌트를 가져다 쓰면서 컴포넌트의 내용을 재정의하였습니다.

left라는 이름을 가진 슬롯에 '부모 왼쪽 버튼' 데이터를 전달되었고 right라는 이름을 가진 슬롯에 아무런 데이터를 전달하지 않았으니 디폴트값인 '자식 오른쪽 버튼'이 렌더링 되었음을 알 수 있습니다!

📌 범위가 지정된 슬롯

<template>
	<div>
		<h1>부모 컴포넌트</h1>
		<ChildComponent>
			<template v-slot:child="slotProps">
			{{ slotProps.messageFromChild }}
			</template>
		</ChildComponent>
	</div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
	components: {
		ChildComponent,
	},
};
</script>
<template>
	<div>
        <h2>자식 컴포넌트</h2>
        <slot name="child" :messageFromChild="message"></slot>
	</div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
    data() {
        return {
            message: '자식 컴포넌트에서 가져온 메시지입니다.',
        };
    }
};
</script>

 

자식 컴포넌트 ➡️ 부모 컴포넌트로 데이터를 전달하고 싶은 경우에도 사용할 수 있는데요.

부모 컴포넌트의 scope 내에서 슬롯 속성을 통해 전달받을 수 있습니다. 예시에서는 slotProps가 되겠습니다!

[v-slot 언제 사용할까?]

여러 컴포넌트에서 동일한 레이아웃을 재사용할 수 있으므로 코드의 재사용성이 높습니다.

즉, 같은 레이아웃을 다양한 데이터와 함께 사용하거나 다른 컴포넌트에서 동일한 슬롯을 사용하여 UI를 빠르게 조립할 수 있습니다.

 

하지만, 이러한 장점이 있다고 해서 항상 v-slot을 사용해야만 하는 것은 아닙니다. 간단한 상황에서는 directive 혹은 property를 사용하는 것이 적합하므로 주로 복잡하거나 동적인 상황에서 사용하는 것이 적합합니다.

 

저작자표시

'Vue.js' 카테고리의 다른 글

[Vue.js] mitt 라이브러리로 이벤트 핸들링하기  (0) 2023.10.13
[Vue.js] .env 파일로 환경 변수 관리하기  (0) 2023.10.04
[Vue.js] axios 라이브러리를 사용한 API 호출  (0) 2023.09.23
[Vue.js] 부모 컴포넌트 ↔ 자식 컴포넌트 데이터 전달  (0) 2023.09.22
[Vue.js] 렌더링과 가상 DOM 이해하기(nextTick은 덤)  (0) 2023.09.20
  1. [들어가기 전에]
  2. [v-slot]
  3. [v-slot 언제 사용할까?]
'Vue.js' 카테고리의 다른 글
  • [Vue.js] mitt 라이브러리로 이벤트 핸들링하기
  • [Vue.js] .env 파일로 환경 변수 관리하기
  • [Vue.js] axios 라이브러리를 사용한 API 호출
  • [Vue.js] 부모 컴포넌트 ↔ 자식 컴포넌트 데이터 전달
eunex
eunex
eunex
성장하는 자기개발자
eunex
전체
오늘
어제
  • 분류 전체보기
    • jQuery
    • JavaScript
    • Vue.js
    • React
    • iOS
    • 자격증
    • Algorithm
    • Python
    • 회고
    • CS
    • 정보처리기사 실기
    • JSP
    • 은행실무기초

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • computed
  • 상반기
  • ref
  • 자격증
  • ADsP
  • 회고
  • Reactive
  • SQLD
  • watch
  • proxy
  • watchEffect
  • vue
  • 개발자

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
eunex
[Vue.js] v-slot으로 컴포넌트 효율적으로 사용하기

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.