Vue.js에서 컴포넌트의 라이프사이클을 이해하는 방법은 무엇인가요?
_____A1: Vue.js 컴포넌트 라이프사이클은 컴포넌트가 생성되고 화면에 렌더링된 후, 업데이트되고, 마침내 파괴되는 전 과정을 뜻합니다. 개발자는 이 과정에서 특정 시점에 원하는 기능을 실행할 수 있습니다.
Q2: Vue 컴포넌트 라이프사이클 훅이란 무엇인가요?
A2: 라이프사이클 훅(Lifecycle Hook)은 Vue가 컴포넌트 특정 상태에 도달할 때 자동으로 호출하는 메서드입니다. 예를 들어, 컴포넌트가 생성 직후(created), DOM에 부착된 후(mounted), 업데이트 전(beforeUpdate), 업데이트 후(updated), 파괴되기 전(beforeDestroy / beforeUnmount), 파괴 완료 후(destroyed / unmounted) 등이 있습니다.
Q3: Vue 3 기준 주요 라이프사이클 훅들은 어떤 것들이 있나요?
A3: Vue 3 주요 훅은 다음과 같습니다.
- `beforeCreate`: 데이터와 이벤트 초기화 전에 호출
- `created`: 컴포넌트가 인스턴스화되고 데이터가 반응형으로 설정된 후 호출
- `beforeMount`: 템플릿이 렌더되어 DOM에 부착되기 직전에 호출
- `mounted`: 컴포넌트가 DOM에 마운트된 후 호출
- `beforeUpdate`: 데이터가 변경되어 DOM 업데이트 직전에 호출
- `updated`: 데이터 변경 후 DOM 업데이트가 완료된 후 호출
- `beforeUnmount`: 컴포넌트가 DOM에서 제거되기 직전에 호출
- `unmounted`: 컴포넌트가 DOM에서 완전히 제거된 후 호출
Q4: 라이프사이클 훅 사용법은 어떻게 되나요?
A4: 옵션 API에서는 컴포넌트 옵션 객체 안에 훅 함수를 작성합니다.
```javascript
export default {
mounted() {
console.log('컴포넌트가 마운트되었습니다.');
}
}
```
컴포지션 API에서는 `import { onMounted } from 'vue'` 후 함수 내부에서 호출합니다.
import { onMounted } from 'vue';
setup() {
onMounted(() => {
console.log('컴포넌트가 마운트되었습니다.');
});
}
```
Q5: 컴포넌트 생성시 라이프사이클 순서는 어떻게 되나요?
A5: 생성 과정 순서는 다음과 같습니다.
`beforeCreate` ▶ `created` ▶ `beforeMount` ▶ `mounted`
Q6: 데이터 변경 시 라이프사이클 훅은 어떻게 작동하나요?
A6: 반응형 데이터나 props가 변경되면 라이프사이클 훅 `beforeUpdate` → `updated` 순으로 호출됩니다. 이 시점에 DOM이 변경되기 전, 후의 처리 로직을 작성할 수 있습니다.
Q7: 컴포넌트가 제거될 때 호출되는 라이프사이클 훅은 무엇인가요?
A7: 컴포넌트가 파괴되기 직전 `beforeUnmount`, 제거 완료 후 `unmounted` 훅이 호출됩니다. 주로 타이머 정리, 이벤트 리스너 해제 등 리소스 정리에 사용됩니다.
Q8: 라이프사이클 훅을 왜 사용해야 하나요?
A8: 컴포넌트 상태에 맞는 적절한 시점에 코드 실행을 보장해줍니다. 예를 들어, API 호출은 `mounted` 후 실행하여 DOM이 준비된 후 처리하거나, 이벤트 등록/해제 작업을 정확한 타이밍에 관리할 수 있습니다.
Q9: 개발자가 주의해야 할 점이 있나요?
A9: 라이프사이클 훅 내부에서 무거운 작업을 수행하면 성능 저하가 발생할 수 있습니다. 또한, 비동기 작업 시 컴포넌트가 이미 언마운트 되었을 수 있으므로 상태 업데이트 전 반드시 컴포넌트 존재 여부를 확인해야 합니다.
Q10: 라이프사이클 상태를 디버깅하는 방법이 있나요?
A10: Vue Devtools 확장 프로그램을 사용하면 컴포넌트 라이프사이클 이벤트를 쉽게 추적할 수 있습니다. 콘솔 로그를 각 훅에 넣어 동작 순서를 확인하는 것도 효과적입니다.
작성자:
이민주 [비회원]
| 작성일자: 1년 전
2024-09-14 17:14:45
조회수: 150 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 150 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.