개발 공부/Svelte

Svelte) Lifecycle functions and Context API

Ryomi 2023. 10. 16. 00:41
728x90
반응형

 

- onMount

function onMount<T>(
	fn: () =>
		| NotFunction<T>
		| Promise<NotFunction<T>>
		| (() => any)
): void;

: onMount 함수는 컴포넌트가 DOM에 마운트된 직후에 콜백을 실행하기 위해 예약합니다. 이 함수는 컴포넌트의 초기화 중에 호출되어야 합니다(하지만 컴포넌트 내부에 위치할 필요는 없으며, 외부 모듈에서 호출될 수 있습니다).

: onMount는 서버 사이드 컴포넌트 내에서 실행되지 않습니다.

<script>
	import { onMount } from 'svelte';

	onMount(() => {
		console.log('the component has mounted');
	});
</script>

 

onMount에서 반환된 함수는 컴포넌트가 언마운트될 때 호출됩니다.

<script>
	import { onMount } from 'svelte';

	onMount(() => {
		const interval = setInterval(() => {
			console.log('beep');
		}, 1000);

		return () => clearInterval(interval);
	});
</script>

 

* 이 동작은 onMount에 전달된 함수가 동기적으로 값을 반환할 때만 작동합니다. 비동기 함수는 항상 Promise를 반환하므로 동기적으로 함수를 반환할 수 없습니다.

 

- beforeUpdate

function beforeUpdate(fn: () => any): void;

: 컴포넌트가 상태 변경 후 업데이트되기 바로 전에 실행될 콜백을 예약합니다.

: 처음으로 콜백이 실행되는 시점은 초기 onMount 이전입니다.

<script>
	import { beforeUpdate } from 'svelte';

	beforeUpdate(() => {
		console.log('the component is about to update');
	});
</script>



- afterUpdate

: 컴포넌트가 업데이트된 직후에 실행될 콜백을 예약합니다.

* 처음으로 콜백이 실행되는 시점은 초기 onMount 이후입니다.

<script>
	import { afterUpdate } from 'svelte';

	afterUpdate(() => {
		console.log('the component just updated');
	});
</script>

 

 

- onDestroy

: 컴포넌트가 언마운트되기 바로 전에 실행될 콜백을 예약합니다.

: onMount, beforeUpdate, afterUpdate, onDestroy 중에서는 이 함수만 서버 사이드 컴포넌트 내에서 실행됩니다.

<script>
	import { onDestroy } from 'svelte';

	onDestroy(() => {
		console.log('the component is being destroyed');
	});
</script>

 

 

- tick

: 보류 중인 상태 변경이 적용된 후 또는 보류 중인 상태 변경이 없는 경우 다음 마이크로태스크에서 해결되는 프로미스를 반환합니다.

<script>
	import { beforeUpdate, tick } from 'svelte';

	beforeUpdate(async () => {
		console.log('the component is about to update');
		await tick();
		console.log('the component just updated');
	});
</script>

 

 

setContext

: setContext 함수는 임의의 컨텍스트 객체를 현재 컴포넌트와 지정된 키와 연결하고 해당 객체를 반환합니다. 그런 다음 해당 컨텍스트는 컴포넌트의 자식들(슬롯된 콘텐츠 포함)에서 getContext를 사용하여 사용할 수 있습니다.

: 라이프사이클 함수와 마찬가지로 이 함수는 컴포넌트의 초기화 중에 호출되어야 합니다.

<script>
	import { setContext } from 'svelte';

	setContext('answer', 42);
</script>

 

* 컨텍스트는 기본적으로 반응적이지 않습니다. 따라서 컨텍스트에서 반응적인 값을 필요로 한다면, 리액티브한 스토어를 컨텍스트로 전달할 수 있습니다.

 

- getContext

: 지정된 키를 가진 가장 가까운 부모 컴포넌트에 속한 컨텍스트를 검색합니다. 이 함수는 컴포넌트의 초기화 중에 호출되어야 합니다.

<script>
	import { getContext } from 'svelte';

	const answer = getContext('answer');
</script>

 

 

 

- hasContext

: 주어진 키가 부모 컴포넌트의 컨텍스트에 설정되었는지를 확인합니다. 이 함수는 컴포넌트의 초기화 중에 호출되어야 합니다.

<script>
	import { hasContext } from 'svelte';

	if (hasContext('answer')) {
		// do something
	}
</script>

 

 

 

- getAllContexts

function getAllContexts<
	T extends Map<any, any> = Map<any, any>
>(): T;

: 가장 가까운 부모 컴포넌트에 속한 전체 컨텍스트 맵을 검색합니다. 이 함수는 컴포넌트의 초기화 중에 호출되어야 합니다. 예를 들어, 프로그래밍적으로 컴포넌트를 생성하고 기존 컨텍스트를 전달하려는 경우에 유용합니다.

<script>
	import { getAllContexts } from 'svelte';

	const contexts = getAllContexts();
</script>

 



- createEventDispatcher

function createEventDispatcher<
	EventMap extends Record<string, any> = any
>(): EventDispatcher<EventMap>;

: 컴포넌트 이벤트를 디스패치하는 데 사용할 수 있는 이벤트 디스패처를 생성합니다. 이벤트 디스패처는 이름과 디테일 두 가지 인수를 받을 수 있는 함수입니다.

: createEventDispatcher로 생성된 컴포넌트 이벤트는 CustomEvent를 생성합니다. 이러한 이벤트는 버블링되지 않습니다. 디테일 인수는 CustomEvent.detail 속성에 해당하며 임의의 유형의 데이터를 포함할 수 있습니다.

<script>
	import { createEventDispatcher } from 'svelte';

	const dispatch = createEventDispatcher();
</script>

<button on:click={() => dispatch('notify', 'detail value')}>Fire Event</button>

 

: 자식 컴포넌트에서 디스패치된 이벤트는 부모 컴포넌트에서 청취할 수 있습니다. 이벤트가 디스패치될 때 제공된 데이터는 이벤트 객체의 detail 속성에서 사용할 수 있습니다.

<script>
	function callbackFunction(event) {
		console.log(`Notify fired! Detail: ${event.detail}`);
	}
</script>

<Child on:notify={callbackFunction} />

이벤트는 dispatch 함수에 세 번째 매개변수로 전달하여 취소 가능합니다. 이 함수는 event.preventDefault()로 이벤트가 취소된 경우에는 false를 반환하고, 그렇지 않은 경우에는 true를 반환합니다.

<script>
	import { createEventDispatcher } from 'svelte';

	const dispatch = createEventDispatcher();

	function notify() {
		const shouldContinue = dispatch('notify', 'detail value', { cancelable: true });
		if (shouldContinue) {
			// no one called preventDefault
		} else {
			// a listener called preventDefault
		}
	}
</script>

 

이벤트 디스패처에 이벤트를 수신할 수 있는 타입을 지정할 수 있습니다. 이를 통해 컴포넌트 내에서 코드가 더 안전하게 되며, 컴포넌트를 사용할 때 이벤트의 타입이 제한됩니다. 여기에서 어떻게 할 수 있는지 확인하세요.

 

 

 

 

Reference) 위 내용은 Svelte 공식 문서의 내용을 번역한 내용입니다.

 

svelte • Docs • Svelte

Edit this page on GitHub On this page On this page The svelte package exposes lifecycle functions and the context API. tsfunction onMount ( fn: () => | NotFunction | Promise > | (() => any)): void; The onMount function schedules a callback to run as soon a

svelte.dev

 

728x90
반응형

'개발 공부 > Svelte' 카테고리의 다른 글

file download / upload progress bar  (0) 2023.11.17
Svelte) Layer Style  (0) 2023.11.06
Svelte) Special elements  (1) 2023.10.15
Svelte) Component directives  (1) 2023.10.15
Svelte) Element directives  (1) 2023.09.18