HTML 짜다 보면 <div>가 수십 개 나오는 게 일상. 이게 싫으면 컴포넌트를 만들어서 사용하면 됩니다. 원하는 HTML 덩어리를 한 글자로 축약할 수 있게 도와주는 문법이 바로 컴포넌트입니다.
컴포넌트를 사용하면 긴 HTML을 간결하게 축약할 수 있습니다.
예를 들어 할인 배너를 하나 만들고 싶다면…
<div class="discount">
<h4>지금 결제하면 20% 할인</h4>
</div>
이 코드가 너무 길고 복잡하다고 가정할 때, 컴포넌트를 사용하면 짧고 재사용 가능한 단위로 만들 수 있습니다.
컴포넌트를 만드는 방법을 요약하면, 아무 곳에나 .vue 파일을 만들고 그 안에 축약할 HTML을 붙여넣으면 됩니다.
중요!
DiscountBanner.vuepackage.json 파일의 "rules" 항목을 열어서 수정할 수 있습니다.)DiscountBanner.vue<template>
<div class="discount">
<h4>지금 결제하면 20% 할인</h4>
</div>
</template>
<script setup>
// 할인 배너 컴포넌트
// 파일 이름은 반드시 두 단어 이상으로 작명 (예: DiscountBanner.vue)
</script>
<style scoped>
.discount {
/* 예시 스타일 */
background-color: #f8f9fa;
padding: 1rem;
text-align: center;
border: 1px solid #ddd;
border-radius: 4px;
}
</style>
원하는 곳에서 위에서 만든 컴포넌트를 import하고 사용하면 됩니다.
ParentComponent.vue<template>
<div>
<!-- 할인 배너 컴포넌트를 사용 -->
<DiscountBanner />
</div>
</template>
<script setup>
import DiscountBanner from './DiscountBanner.vue'
</script>
<style scoped>
/* 필요에 따라 스타일 추가 */
</style>
사용 방법 요약:
DiscountBanner.vue)을 생성합니다.<template>, <script setup>, <style>을 정의합니다.import하여 <DiscountBanner /> 처럼 사용합니다.이전에 만들어 놓은 모달창 코드는 매우 길고 복잡했습니다. 이를 컴포넌트로 축약해봅니다.
(단, 모달창이 안 열리는 문제는 데이터 바인딩 문제일 수 있으니, 다음 강의에서 해결 방법을 다룰 예정입니다.)
ModalDialog.vue<template>
<div class="modal">
<div class="modal-content">
<slot></slot>
</div>
</div>
</template>
<script setup>
// 모달 컴포넌트
// 사용 시 모달이 안 열리는 경우, 데이터 바인딩 문제일 수 있으니 다음 강의에서 다룰 예정입니다.
</script>
<style scoped>
.modal {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
display: none; /* 기본적으로 숨김 처리 */
}
.modal-content {
background: white;
padding: 1rem;
margin: 10% auto;
width: 80%;
}
</style>
<div> 여러 개 있는 거 보기 싫으면 컴포넌트로 축약합니다.컴포넌트를 사용하면 긴 HTML을 한 글자로 축약할 수 있어 개발 시간이 줄어들고 코드 관리가 쉬워집니다.