안녕하세요! 오늘은 Vue2의 핵심 기초 개념들을 쉽고 재미있게 설명해드리려고 해요. 프론트엔드 개발의 매력적인 세계로 함께 떠나볼까요?
Vue2란 무엇인가요? 🤔
Vue2는 사용자 인터페이스를 만들기 위한 JavaScript 프레임워크예요.
마치 레고 블록처럼 웹 애플리케이션을 조립할 수 있게 해주는 도구라고 생각하면 됩니다!
핵심 특징 ⭐
- 점진적 도입 가능: 기존 프로젝트에 부분적으로 적용 가능
- 반응형 데이터: 데이터가 변경되면 화면이 자동으로 업데이트
- 컴포넌트 기반: 재사용 가능한 UI 조각들을 만들 수 있음
Vue 인스턴스 생성하기 🎯
const app = new Vue({
el: '#app',
data: {
message: '안녕하세요!'
},
methods: {
sayHi() {
alert(this.message)
}
}
})
핵심 문법 요소 📝
1. 데이터 바인딩
<!-- 텍스트 바인딩 -->
<div>{{ message }}</div>
<!-- 속성 바인딩 -->
<img v-bind:src="imageUrl">
<!-- 축약형 -->
<img :src="imageUrl">
2. 디렉티브 사용하기
<!-- 조건부 렌더링 -->
<p v-if="seen">이제 나를 볼 수 있어요</p>
<!-- 반복 렌더링 -->
<ul>
<li v-for="item in items" :key="item.id">
{{ item.text }}
</li>
</ul>
<!-- 이벤트 핸들링 -->
<button v-on:click="doSomething">클릭하세요</button>
<!-- 축약형 -->
<button @click="doSomething">클릭하세요</button>
3. computed와 watch 🔄
export default {
data() {
return {
firstName: '길동',
lastName: '홍'
}
},
computed: {
// 계산된 속성
fullName() {
return this.lastName + ' ' + this.firstName
}
},
watch: {
// 데이터 감시
firstName(newValue, oldValue) {
console.log('이름이 변경되었습니다:', oldValue, '->', newValue)
}
}
}
컴포넌트 시스템 🎨
1. 컴포넌트 등록
Vue.component('my-component', {
template: '<div>커스텀 컴포넌트입니다!</div>'
})
2. Props 전달
Vue.component('child', {
props: ['message'],
template: '<span>{{ message }}</span>'
})
<child message="안녕하세요!"></child>
3. 이벤트 발신
// 자식 컴포넌트
methods: {
notify() {
this.$emit('alert', '자식이 부모에게 알립니다!')
}
}
// 부모 컴포넌트
<child @alert="handleAlert"></child>
생명주기 훅 🌱
export default {
beforeCreate() {
console.log('인스턴스 초기화 전')
},
created() {
console.log('인스턴스 생성됨')
},
mounted() {
console.log('DOM에 마운트됨')
},
updated() {
console.log('데이터 변경으로 재렌더링됨')
},
destroyed() {
console.log('인스턴스 제거됨')
}
}
실전 사용 예시 💫
new Vue({
el: '#todo-app',
data: {
newTodo: '',
todos: []
},
methods: {
addTodo() {
if (this.newTodo.trim()) {
this.todos.push({
id: Date.now(),
text: this.newTodo
})
this.newTodo = ''
}
},
removeTodo(id) {
this.todos = this.todos.filter(todo => todo.id !== id)
}
}
})
주의사항 ⚠️
반응형 한계
- 객체의 새로운 속성 추가/삭제 시 Vue.set/Vue.delete 사용 필요
- 배열 인덱스로 직접 수정 시 반응형 동작 안 함
Props 변경
- props는 단방향 데이터 흐름을 따름
- 직접 수정하지 말고 이벤트를 통해 부모에게 알려야 함
성능 최적화 팁 🚀
v-show vs v-if
- 자주 토글되는 요소는 v-show 사용
- 조건이 거의 변경되지 않으면 v-if 사용
key 속성 활용
- v-for 사용 시 항상 고유한 key 지정
- DOM 재사용 최적화에 도움
참고자료:
728x90
'300===Dev Framework > VueJS' 카테고리의 다른 글
Vue.js Lifecycle Explained (0) | 2024.06.10 |
---|---|
Vue (v-model) (0) | 2024.06.05 |
VueJS Introduced (0) | 2024.05.26 |
Vue Beginner Tutorial Part (lifecycle, watchers, components) (0) | 2024.05.25 |
Vue Beginner Tutorial (attribute, form binding, event, condition, list rendering) (0) | 2024.05.25 |