npm i degit
npx degit sveltejs/template my-svelte
npm i
npm run dev
다섯가지가 있다. hook이라고도 부른다.
<!-- [코드 3-1-1] App.svelte-->
<script>
import Something from './Something.svelte';
let show = false;
let text = 'wonjin';
</script>
<button on:click={ ()=>{show=!show;} }>
Show/Hide
</button>
{#if show}
<input type="text" bind:value={text} />
<Something {text} />
{/if}
<!-- [코드 3-1-2] Child.svelte-->
<script>
import { onMount, onDestroy, beforeUpdate, afterUpdate } from "svelte";
export let text;
onMount(()=>{
console.log('mount');
return () => {
console.log('destory - from onMount [2]');
}
});
onDestroy(()=>{
console.log('destroy - from onDestroy [1]');
});
beforeUpdate(()=>{
console.log('beforeUpdate : ', text);
});
afterUpdate(()=>{
console.log('afterUpdate : ', text);
});
</script>
<h1>{text}</h1>
<!-- [코드 3-2] App.svelte-->
<script>
import { tick } from "svelte";
let text = 'before Render';
const onClick = async (e) => {
text = 'after Render';
await tick();
const header = document.getElementById('header');
alert(header.textContent);
};
</script>
<h1 id="header">{text}</h1>
<button on:click={onClick}>re-render</button>
await tick()
이 없으면 alert창에는 'after Render'가 아닌 'before Render'가 출력된다. text='after Render'
가 실행된 그 즉시 리렌더링 되지 않는다. 렌더링은 특정 단위/주기로 일어난다. tick()
을 이용하여 그 즉시 리렌더링이 처리되도록 할 수 있다.