반응형
이 포스트는 HEROPY 님 유튜브 Svelte 강좌를 보고 공부한 내용을 정리한 포스트입니다.
Svelte에서 컴포넌트는 화면에 랜더링되거나 사라질 때를 나타내는 컴포넌트의 상태가 있다.
이 상태의 흐름을 컴포넌트 생명주기라 한다.
- mounted: 컴포넌트가 화면 또는 다른 컴포넌트에 랜더링된 (연결된) 상태. 이 전에는 화면 요소에 접근할 수 없음
- destroyed: 컴포넌트가 화면 또는 다른 컴포넌트에서 사라진 (연결이 해제된) 상태
- before update: 컴포넌트의 반응성 데이터 변경에 의해 재랜더링 되기 전 상태
- after update: 컴포넌트의 반응성 데이터 변경에 의해 재랜더링 된 후 상태
이런 상태들은 컴포넌트가 화면(DOM)상에서 어떻게 다뤄지냐에 따라 다양하게 호출된다.
예를들어 특정 컴포넌트가 화면에 최초로 랜더링(연결될) 될 때 before update → mount → after update 의 주기로 진행된다. (destroyed는 해당 컴포넌트가 사라질 때)
또한, 화면에 그려져있는(연결되있던) 컴포넌트의 반응성 데이터가 변경되어 화면이 갱신될 때 before update → after update 순으로 진행된다.
그리고 화면에 그려져있던(연결되있던) 컴포넌트가 사라질 때 destroyed 상태로 진행된다.
각 상태는 훅(Hook)을 통해 접근하고 해당 상태일 때 처리해야할 로직을 수행할 수 있다.
- mounted: onMount
- destroyed: onDestroy
- before update: beforeUpdate
- after update: afterUpdate
- App.svelte
- 각 Hook은 svelte 통해 import할 수 있고 해당 주기 때 수행할 로직을 전달할 수 있다.
- 아래와 같은 코드를 작성하고 언제 어떤 Hook이 실행되는지 확인해보자
- 참고로 과거엔 onDestroy 가 없었고 onMount 함수에서 함수를 반환하는 형태로 destroyed hook을 구현했었다. 지금도 두 방법 모두 가능하지만 onDestroy를 사용하는게 보다 더 직관적으로 보인다.
<script> import { onMount, onDestroy, beforeUpdate, afterUpdate } from 'svelte'; let count = 0; onMount(() => { console.log('Mounted!!'); }); onDestroy(() => { console.log('Destroyed'); }); beforeUpdate(() => { console.log('before update'); }) afterUpdate(() => { console.log('after update'); }); </script> <h1>Something {count}</h1> <button type="button" on:click={() => count++}>+</button>
반응형
'Front-End' 카테고리의 다른 글
[Svelte 시리즈] 컴포넌트와 스토어 (0) | 2022.02.19 |
---|---|
[Svelte 시리즈] 데이터 바인딩, 조건문, 반복문, 이벤트 핸들링 (0) | 2022.02.17 |
Node.js 및 NPM 설치 (0) | 2018.11.27 |