Svelte의 생명주기 함수인 onMount()는 컴포넌트가 DOM에 추가될 때 호출된다.
컴포넌트가 DOM에 추가될 때 최초 한 번만 실행해야 하는 작업을 작성할 수 있다.
onMount() 함수는 주로 아래 작업을 처리하기 위해 사용된다.
전체 화면을 onMount로 로드하는것도 가능하지만 컴포넌트마다 onMount도 가능하다.
기본 구문은 아래와 같다.
<script>
import { onMount } from 'svelte';
onMount(() => {
// 컴포넌트가 처음 렌더링되고 DOM에 마운트되었을 때 실행할 코드
console.log('Component has been mounted.');
// 필요한 정리 작업을 반환할 수 있음 (optional)
return () => {
console.log('Component is being unmounted.');
};
});
</script>
<p>Check the console when this component mounts and unmounts.</p>
<script>
import { onMount } from 'svelte';
let data = null;
onMount(async () => {
// 비동기 API 호출
const response = await fetch('https://api.example.com/data');
data = await response.json();
});
</script>
{#if data}
<p>Data: {JSON.stringify(data)}</p>
{:else}
<p>Loading...</p>
{/if}
onMount는 비동기 함수와 함께 사용하여 데이터를 로드하거나 초기화할 수 있다.<script>
import { onMount } from 'svelte';
let interval;
onMount(() => {
// 타이머 시작
interval = setInterval(() => {
console.log('Tick');
}, 1000);
// 컴포넌트 언마운트 시 타이머 정리
return () => {
clearInterval(interval);
console.log('Interval cleared');
};
});
</script>
<p>Check the console for interval logs.</p>
onDestroy()함수는 컴포넌트가 DOM에서 제가될 때 호출된다.
컴포넌트가 DOM에서 제거될 때 실행되어야 하는 소스 코드 또는 함수 인자로 전달한다.
이 함수는 React의 useEffect에서 반환하는 정리 함수와 유사하게 작동하며, 컴포넌트가 사라지기 전에 호출된다.
출처: https://developer-talk.tistory.com/629 [DevStory:티스토리]
<!-- 부모 컴포넌트 - App.svelte -->
<script>
import Child from './Child.svelte';
let isInputElementView = false;
const handleClick = (param) => {
isInputElementView = param;
}
</script>
<button on:click={() => handleClick(true)}>
Child 컴포넌트 활성화
</button>
<button on:click={() => handleClick(false)}>
Child 컴포넌트 비활성화
</button>
{#if isInputElementView}
<Child />
{/if}
<!-- 자식 컴포넌트 - Child.svelte -->
<script>
import {onDestroy} from 'svelte'; // svelte 패키지 import
onDestroy(() => {
console.log('onDestroy() - Child 컴포넌트 비활성화');
})
</script>
<div>
<h1>hello</h1>
</div>

브라우저의 이벤트 리스너는 컴포넌트의 생명 주기와 직접적으로 연결되어 있지 않다. 이는 브라우저의 전역 객체(예: window, document)에 직접 등록된 이벤트 리스너가 Svelte 컴포넌트의 제거와는 무관하게 계속 살아있기 때문이다.
따라서 우리는 이것을 제거해줘야 메모리를 아낄 수 있다!