Vue.js는 컴포넌트 기반의 프레임워크로,
애플리케이션을 작은 단위의 컴포넌트로 나누어 개발할 수 있도록 돕습니다.
이러한 컴포넌트는 재사용 가능하고, 독립적으로 관리할 수 있어 유지보수와 확장성이 뛰어납니다.
이번 글에서는 Vue.js의 컴포넌트 시스템과 Props, 그리고 슬롯(Slot) 개념에 대해 자세히 알아보겠습니다.
컴포넌트란?
컴포넌트는 Vue.js 애플리케이션의 기본 빌딩 블록입니다.
각 컴포넌트는 HTML, CSS, JavaScript를 포함하여 특정 기능이나 UI를 담당합니다.
컴포넌트를 사용하면 복잡한 애플리케이션을 더 작은 단위로 나누어 관리할 수 있으며,
각 컴포넌트는 독립적으로 개발 및 테스트가 가능합니다.
- 컴포넌트 생성 방법
Vue.js에서 컴포넌트를 생성하는 방법은 여러 가지가 있지만, 가장 일반적인 방법은 Vue.extend() 메서드를 사용하는 것입니다.
// Vue 인스턴스 생성
const CounterComponent = Vue.extend({
data() {
return {
count: 0
};
},
template: `
<div>
<p>Count: {{ count }}</p>
<button @click="increment">Increment</button>
</div>
`,
methods: {
increment() {
this.count++;
}
}
});
// 컴포넌트를 전역적으로 등록
Vue.component('counter', CounterComponent);
// Vue 인스턴스 생성 및 마운트
new Vue({
el: '#app',
template: `
<div>
<h1>Counter Example</h1>
<counter></counter>
</div>
`
});
→ Vue.extend()를 사용하여 CounterComponent라는 컴포넌트를 정의하고, Vue.component()를 사용하여 이 컴포넌트를 전역적으로 등록합니다.
이후, Vue 인스턴스를 생성할 때 counter 컴포넌트를 템플릿에서 사용할 수 있습니다.
이렇게 하면, CounterComponent를 여러 곳에서 재사용할 수 있게 됩니다.
- Composition API
import { defineComponent, ref } from 'vue';
export default defineComponent({
setup() {
const name = ref('Vue.js');
return { name };
},
template: '<div>Hello, {{ name }}!</div>'
});
Props의 사용법
Props는 부모 컴포넌트에서 자식 컴포넌트로 데이터를 전달하는 방법입니다.
Props를 사용하면 컴포넌트 간의 데이터 흐름을 관리할 수 있으며, 재사용성을 높일 수 있습니다.
Props는 자식 컴포넌트에서 props 옵션을 통해 정의할 수 있습니다.
// 부모 컴포넌트
Vue.component('parent-component', {
template: '<child-component :message="greeting"></child-component>',
data() {
return {
greeting: 'Hello from Parent!'
};
}
});
// 자식 컴포넌트
Vue.component('child-component', {
props: ['message'],
template: '<div>{{ message }}</div>'
});
→ parent-component는 greeting이라는 데이터를 child-component에 message라는 Props로 전달합니다.
자식 컴포넌트는 이 Props를 사용하여 부모로부터 받은 메시지를 출력합니다.
슬롯(Slot)
슬롯은 컴포넌트의 템플릿 내에서 부모 컴포넌트의 콘텐츠를 삽입할 수 있는 기능입니다.
슬롯을 사용하면 컴포넌트를 더욱 유연하게 만들 수 있으며, 다양한 콘텐츠를 동적으로 삽입할 수 있습니다.
Vue.component('my-slot-component', {
template: `
<div>
<h1>My Slot Component</h1>
<slot></slot>
</div>
`
});
// 사용 예
<my-slot-component>
<p>This is some content passed to the slot!</p>
</my-slot-component>
→ my-slot-component는 <slot></slot>을 사용하여 부모 컴포넌트에서 전달된 콘텐츠를 삽입합니다.
부모 컴포넌트에서 <my-slot-component>를 사용할 때, 슬롯에 콘텐츠를 전달하면 해당 콘텐츠가 컴포넌트 내에 삽입됩니다.
마무리
Vue.js의 컴포넌트 시스템과 Props, 슬롯은 애플리케이션을 구조화하고 데이터 흐름을 관리하는 데 중요한 역할을 합니다.
컴포넌트를 사용하여 애플리케이션을 작은 단위로 나누고, Props를 통해 데이터를 전달하며, 슬롯을 활용하여 유연한 콘텐츠 삽입이 가능합니다.
이러한 개념들을 잘 이해하고 활용하면, Vue.js로 더욱 효율적이고 유지보수하기 쉬운 애플리케이션을 개발할 수 있습니다.
'IT · 인터넷' 카테고리의 다른 글
[Nuxt.js] 상태 관리 라이브러리 Pinia (0) | 2025.02.21 |
---|---|
[Nuxt.js] TypeScript 타입과 TypeScript를 활용하여 Nuxt.js 컴포넌트 작성하기 (2) | 2025.02.21 |
[NUXT.JS] Vue.js 프레임워크 (0) | 2025.02.19 |
[JAVA] MyBatis에서 IF문과 CHOOSE문 사용하는 방법 (0) | 2025.02.17 |
[JAVA] MyBatis 특징과 사용방법 (1) | 2025.02.16 |