7장 단일 파일 컴포넌트를 이용한 Vue 애플리케이션 개발
7장 단일 파일 컴포넌트를 이용한 Vue 애플리케이션 개발
7장 단일 파일 컴포넌트를 이용한 Vue 애플리케이션 개발
7.1 프로젝트 설정 도구
7.1.1 Vue CLI 도구
1
2
<!-- Vue CLI로 프로젝트 생성 -->
vue create my-project
Vue CLI는 Vue 프로젝트를 빠르게 설정하는 공식 도구이다. 설치 시 기본 컴포턴트 설치를 권유하여 템플릿 생성에는 용이
7.1.2 Vite 기반의 도구
1
2
<!-- Vite로 프로젝트 생성 -->
npm create vite@latest my-vite-project -- --template vue
Vite는 빠르고 현대적인 빌드 도구로 Vue 프로젝트를 설정함. 빠름 엄청
7.2 생성된 프로젝트 구조 살펴보기
7.2.1 프로젝트 생성과 시작(진입점 살펴보기)
1
2
3
4
<!-- main.js -->
import { createApp } from 'vue'
import App from './App.vue'
createApp(App).mount('#app')
main.js는 Vue 애플리케이션의 시작점 역할을 한다. 여기서 css 임포트 하여 전역으로 뿌려줌
7.2.2 단일 파일 컴포넌트 살펴보기
1
2
3
4
5
6
7
<!-- App.vue -->
<template>
<h1>Hello, Vue!</h1>
</template>
<script>
export default {}
</script>
단일 파일 컴포넌트(SFC)는 템플릿, 스크립트, 스타일을 하나로 묶습니다.
7.2.3 간단한 단일 파일 컴포넌트 작성과 사용
1
2
3
4
5
6
7
8
9
10
11
<!-- HelloWorld.vue -->
<template>
<p></p>
</template>
<script>
export default {
data() {
return { message: '안녕하세요!' }
}
}
</script>
간단한 SFC는 데이터와 템플릿을 결합해 동적 UI를 만듭니다.
7.3 컴포넌트의 조합
1
2
3
4
5
6
7
8
9
10
<!-- App.vue -->
<template>
<HelloWorld />
</template>
<script>
import HelloWorld from './components/HelloWorld.vue'
export default {
components: { HelloWorld }
}
</script>
컴포넌트를 조합하면 재사용 가능한 UI를 구성하기 가능. 조립하는 부품이라고 생각하면됨
7.4 속성
7.4.1 속성을 이용한 정보 전달
1
2
3
4
5
6
7
8
9
<!-- Child.vue -->
<template>
<p></p>
</template>
<script>
export default {
props: ['text']
}
</script>
속성(props)은 부모에서 자식으로 데이터를 전달합니다.
7.4.2 속성을 이용해 객체 전달하기
1
2
3
4
5
6
7
8
9
<!-- Child.vue -->
<template>
<p></p>
</template>
<script>
export default {
props: ['info']
}
</script>
객체를 속성으로 전달해 복잡한 데이터를 공유할 수 있습니다.
7.4.3 속성의 유효성 검증
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!-- Child.vue -->
<template>
<p>9</p>
</template>
<script>
export default {
props: {
count: {
type: Number,
required: true
}
}
}
</script>
속성 유효성 검증으로 데이터 타입과 필수 여부를 체크합니다.
7.5 사용자 정의 이벤트
7.5.1 사용자 정의 이벤트를 이용한 정보 전달
1
2
3
4
<!-- Child.vue -->
<template>
<button @click="$emit('customEvent', 'Hello')">Click</button>
</template>
$emit으로 사용자 정의 이벤트를 발생시켜 자식에서 부모로 데이터를 보냅니다.
7.5.2 이벤트 유효성 검증
1
2
3
4
5
6
<!-- Child.vue -->
<script>
export default {
emits: ['customEvent']
}
</script>
emits 옵션으로 이벤트 선언을 명시해 유효성을 확인합니다.
7.6 이벤트 에미터 사용
1
2
3
4
5
6
<!-- Child.vue -->
<script>
import { defineEmits } from 'vue'
const emit = defineEmits(['update'])
emit('update', 'New Value')
</script>
이벤트 에미터는 최신 Vue에서 이벤트를 깔끔하게 관리합니다.
7.7 TodoList 예제 리팩토링
7.7.1 컴포넌트 분할과 정의
1
2
3
4
5
6
7
8
9
<!-- TodoItem.vue -->
<template>
<li></li>
</template>
<script>
export default {
props: ['todo']
}
</script>
TodoList를 작은 컴포넌트로 나눠 관리하기 쉽게 만듭니다.
7.7.2 속성과 이벤트를 조합한 리팩토링
1
2
3
4
5
6
7
8
9
<!-- TodoItem.vue -->
<template>
<li @click="$emit('remove', todo)"></li>
</template>
<script>
export default {
props: ['todo']
}
</script>
속성과 이벤트를 사용해 Todo 항목을 동적으로 관리합니다.
7.7.3 이벤트 에미터 적용하기
1
2
3
4
5
6
<!-- TodoItem.vue -->
<script>
import { defineEmits } from 'vue'
const emit = defineEmits(['remove'])
emit('remove', 'Task 1')
</script>
이벤트 에미터로 Todo 삭제 기능을 깔끔하게 구현합니다.
This post is licensed under CC BY 4.0 by the author.