
- created
- 컴포넌트 인스턴스가 생성된 직후
- DOM이 아직 생성되지 않은 시점
- mounted
- 컴포넌트에서 DOM이 만들어진 시점
- 외부데이터나 라이브러리 추가 시점
- updated
- 데이터가 변경될 때 DOM을 업데이트
- unmounted(혹은 destroyed)
- 컴포넌트 종료
✅ 라이프사이클 훅이란?
Vue 컴포넌트는 생성부터 제거까지 일정한 생명 주기를 거칩니다.
이때 각 단계에서 **특정 함수를 실행할 수 있게 해주는 것이 "라이프사이클 훅"**입니다.
✅ 라이프사이클 훅을 활용해 자동으로 슬라이드 되는 컴포넌트 만들기
🔹 mounted()
mounted() {
// 컴포넌트가 DOM에 실제로 붙은 직후 실행
this.interval = setInterval(() => {
...
}, 3000)
}
- 역할: DOM 접근 가능해짐 →
setInterval
, API 호출, focus 지정 등 가능
- 타이밍: 화면에 컴포넌트가 실제로 렌더링된 이후
🔹 unmounted()
unmounted() {
clearInterval(this.interval);
}
- 역할: 컴포넌트가 사라질 때 정리 작업
- 예:
setInterval
, 이벤트 리스너, 타이머 제거 등
- Vue 3에서만 사용 (
beforeUnmount
,unmounted
로 분리됨)
✅ 라이프사이클 요약 (Vue 3 기준)
훅 | 설명 |
created() | 데이터·메서드 준비됨, DOM 접근 불가 |
mounted() | DOM 접근 가능, 초기화 작업 수행 |
updated() | 반응형 데이터 변경 후 다시 렌더링 될 때 |
unmounted() | 컴포넌트가 DOM에서 제거될 때 실행 |
✅ 코드 흐름 요약
mounted() {
// 3초마다 텍스트 자동 변경
this.interval = setInterval(...);
}
unmounted() {
// 컴포넌트 제거 시 인터벌 정리
clearInterval(this.interval);
}
→ 메모리 누수 방지를 위해 정리 코드(
clearInterval
)까지 활용✅ 전체 코드
<template>
<Event :text="text[eventTextNum]" />
</template>
<script>
export default {
name: 'App',
data() {
return {
text: [
'NEPLIX 강렬한 운명의 드라마, 경기크리쳐',
'디즈니 100주년 기념작, 위시',
'그날, 대한민국의 운명이 바뀌었다, 서울의 봄',
],
eventTextNum: 0,
interval: null,
}
},
components: {
Event: Event,
},
mounted() {
this.interval = setInterval(() => {
if(this.eventTextNum == this.text.length - 1) {
this.eventTextNum = 0;
} else {
this.eventTextNum +=1;
}
}, 3000)
},
unmounted() {
clearInterval(this.interval); // 앱이 종료될 경우 인터벌 해제
},
}
</script>
Share article