Appearance
Vue.js 라이프사이클 이해하기
Vue 컴포넌트는 생성, 마운트, 업데이트, 언마운트 흐름을 따른다.
다만 버전에 따라 훅 이름이 조금 다르다.
Vue 2:beforeDestroy,destroyedVue 3:beforeUnmount,unmounted
아래는 현재 기준으로 많이 쓰는 개념 위주로 정리한 것이다.
1. Creation
컴포넌트 인스턴스가 만들어지고 반응성 상태가 준비되는 단계다.
beforeCreate아직 reactive state, event 등이 준비되기 전이다.createddata, props, methods 등에 접근할 수 있다. 하지만 DOM은 아직 마운트되지 않았다.
데이터 초기화, 기본 상태 설정 같은 작업은 이 구간에서 자주 이뤄진다.
2. Mounting
컴포넌트가 실제 DOM에 연결되는 단계다.
beforeMount첫 렌더링 직전mountedDOM 접근이 가능한 시점
브라우저 전용 API를 사용하거나 실제 DOM 측정이 필요하면 보통 mounted 이후에 처리한다.
3. Updating
반응형 상태가 바뀌어 다시 렌더링되는 단계다.
beforeUpdateDOM 패치 직전updatedDOM 패치 완료 후
updated 안에서 다시 상태를 바꾸면 무한 루프가 생길 수 있으므로 주의해야 한다.
4. Unmounting
컴포넌트가 제거되는 단계다.
beforeUnmount/beforeDestroyunmounted/destroyed
타이머, 이벤트 리스너, 외부 구독(subscription) 정리는 이 시점에 한다.
computed와 watch
라이프사이클과 함께 자주 비교되는 개념이다.
computed
기존 반응형 상태로부터 파생 값을 만들 때 적합하다.
vue
computed: {
fullName() {
return this.firstName + ' ' + this.lastName
}
}- 캐시된다.
- 의존성이 바뀔 때만 다시 계산된다.
watch
특정 값의 변화를 감지해서 부수 효과(side effect)를 실행할 때 적합하다.
예)
- API 재호출
- debouncing
- 값 검증
- 외부 라이브러리 동기화
vue
watch: {
searchQuery(newValue) {
this.fetchResults(newValue)
}
}언제 무엇을 쓰나
- 파생 값이면
computed - 변화에 따른 작업이면
watch
대부분의 단순 계산은 computed가 더 자연스럽다.