| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
Tags
- graceful shutdown
- goroutine
- container
- App.vue
- Refactoring
- component
- PROPS
- websocket
- Vue
- Dictionary
- URL
- goroutines
- SFC
- emit
- toggle
- TODO
- map
- Matrix
- channel
- todo-list
- golang
- reactivity
- CDN
- localStorage
- 행렬
- cli
- Server
- Vue.js
- method
- go
Archives
- Today
- Total
ksundev 님의 블로그
Vue의 Component 통신 방식 - 1. Props 본문
Vue 컴포넌트 통신 개념
이전 시간에 살펴봤듯 컴포넌트 간에 상호작용이 필요한 경우 통신이 필요합니다.
Props (상위 → 하위)
부모가 자식에게 데이터를 전달하는 방식입니다.
- 방향: 부모 컴포넌트 → 자식 컴포넌트
- 용도: 초기값, 설정값, 표시할 데이터 전달
- 특징: 자식은 받은 데이터를 직접 수정할 수 없음 (읽기 전용)
Event Emit (하위 → 상위)
자식이 부모에게 신호를 보내는 방식입니다.
- 방향: 자식 컴포넌트 → 부모 컴포넌트
- 용도: 버튼 클릭, 입력값 변경 등의 이벤트 알림
- 특징: 데이터와 함께 이벤트를 발생시킬 수 있음
통신 흐름
- 부모가 Props로 자식에게 데이터 전달
- 자식이 Event Emit으로 부모에게 응답
- 이를 통해 양방향 소통 완성
이렇게 단방향 데이터 흐름을 유지하면서도 컴포넌트 간 상호작용이 가능합니다.
그 중에서도 이번 포스트에서는 Props에 대해서 알아보겠습니다.
Vue.js Props를 통한 부모-자식 컴포넌트 통신
Vue.js에서 컴포넌트 간 통신은 애플리케이션의 핵심 개념 중 하나입니다. 이번 글에서는 Props를 사용한 부모에서 자식으로의 데이터 전달 방법을 살펴보겠습니다.
Props란?
Props는 Properties의 줄임말로, 부모 컴포넌트에서 자식 컴포넌트로 데이터를 전달하는 Vue.js의 기본적인 방법입니다.
특징
- 단방향 데이터 흐름: 부모 → 자식으로만 전달
- 읽기 전용: 자식 컴포넌트에서 받은 props는 직접 수정 불가
- 반응성: 부모의 데이터가 변경되면 자식도 자동 업데이트
실제 코드 예제
<!-- HTML -->
<div id="app">
<!-- <app-header v-bind:프롭스이름="상위컴포넌트의 데이터 이름"></app-header> -->
<app-header v-bind:title="appTitle"></app-header>
</div>
<!-- JavaScript -->
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
Vue.createApp({
data() {
return {
appTitle: '프롭스 넘기기'
}
},
components: {
'app-header': {
template: '<h1>{{ title }}</h1>',
props: ['title']
}
}
}).mount('#app');
</script>
코드 분석
1. 부모 컴포넌트 (Vue 인스턴스)
data() {
return {
appTitle: '프롭스 넘기기' // 전달할 데이터
}
}
2. Props 전달
<app-header v-bind:title="appTitle"></app-header>
v-bind:title="appTitle": 부모의appTitle데이터를 자식의titleprop으로 전달v-bind:는:로 축약 가능:<app-header :title="appTitle"></app-header>
3. 자식 컴포넌트 (app-header)
'app-header': {
template: '<h1>{{ title }}</h1>', // props 사용
props: ['title'] // 받을 props 정의
}
Props 통신 흐름
부모 컴포넌트 (appTitle: '프롭스 넘기기')
↓ v-bind:title="appTitle"
자식 컴포넌트 (props: ['title'])
↓ {{ title }}
화면 출력: <h1>프롭스 넘기기</h1>Props 정의 방법
1. 배열 형태 (간단한 방법)
props: ['title', 'content', 'author']
2. 객체 형태 (권장 방법)
props: {
title: {
type: String,
required: true,
default: '기본 제목'
},
count: {
type: Number,
default: 0
}
}
Props 유효성 검사
props: {
title: {
type: String, // 타입 검사
required: true, // 필수 여부
default: '제목', // 기본값
validator: function(value) {
return value.length > 0; // 커스텀 검증
}
}
}
주의사항
- Props는 읽기 전용: 자식에서 직접 수정하면 안됨
- 단방향 데이터 흐름: 부모에서 자식으로만 전달
- 명명 규칙: HTML 속성은 kebab-case, JavaScript는 camelCase
마무리
Props는 Vue.js 컴포넌트 통신의 기본이 되는 개념입니다. 부모에서 자식으로 데이터를 전달하는 이 단순하지만 강력한 패턴을 통해 재사용 가능하고 유지보수하기 쉬운 컴포넌트를 만들 수 있습니다.
다음 글에서는 자식에서 부모로 데이터를 전달하는 Event Emit에 대해 알아보겠습니다.
참고: 이 예제는 Vue 3의 CDN 버전을 사용했습니다. 실제 프로젝트에서는 Vue CLI나 Vite를 사용하는 것을 권장합니다.
'[개발] Vue.js > 기본' 카테고리의 다른 글
| Vue의 Component 통신 방식 - 3. 같은 level 끼리 (2) | 2025.06.21 |
|---|---|
| Vue의 Component 통신 방식 - 2. Event Emit (0) | 2025.06.19 |
| Vue의 Component 등록과 사용 (0) | 2025.06.18 |
| v-for 디렉티브 사용하기 (1) | 2025.06.18 |
| Vue의 메서드(method) 사용하기 (1) | 2025.06.16 |