모든 컴포넌트는 Lifecylce
을 갖고 있습니다. 몇몇 함수를 통해 Lifecycle
마다 실행할 코드를 작성할 수 있습니다.
onMount는 컴포넌트가 DOM에 처음 랜더된 후 넘겨진 콜백함수를 실행합니다.
<script>
import { onMount } from 'svelte';
let photos = [];
onMount(async () => {
const res = await fetch("/tutorial/api/album");
photos = await.res.json();
});
</script>
...
onDestroy는 컴포넌트가 destroy될 때 인자로 넘겨진 콜백함수를 실행합니다.
// utils.js
import { onDestroy } from 'svelte';
export function onInterval(callback, milliseconds) {
const interval = setInterval(callback, milliseconds);
onDestroy(() => {
clearInterval(interval);
});
}
// App.svelte
<sciprt>
import { onInterval } from './utils.js';
let counter = 0;
onInterval(() => counter+=1, 1000);
</script>
beforeUpdate는 DOM이 업데이트 되기 직전에 인자로 넘겨준 콜백함수를 실행하고
afterUpdate는 DOM이 업데이트 된 직후에 인자로 넘겨준 콜백함수를 실행합니다.
// App.svelte
...
let div;
let autoscroll;
beforeUpdate(() => {
const nowHeight = div.offesetHeight + div.scrollTop;
autoscroll = div && (nowHeight) > (div.scrollHeight - 20);
afterUpdate(() => {
if (autoscroll) div.scrollTo(0, div.scrollHeight);
}
tick은 컴포넌트가 초기화될 때 뿐만 아니라 어디서든 실행할 수 있는 함수입니다.
컴포넌트의 상태를 업데이트할 때, DOM에 즉시 업데이트 되지 않고 다른 변경사항이 있나 감시하고있는 다음 microtask까지 기다립니다.
tick은 그것을 기다리지 않고 지금까지 변경된 상태가 DOM에 즉시 업데이트 되는 Promise를 반환합니다.