Svelte 구성 요소 수명 주기 후크
지금 http://jauyeung.net/subscribe/에서 내 이메일 목록을 구독하십시오.
Svelte는 프론트 엔드 웹 앱 개발을 위한 떠오르는 프론트 엔드 프레임워크입니다.
사용이 간편하고 결과를 빠르게 생성할 수 있습니다.
이 기사에서는 Svelte 구성 요소의 수명 주기 후크를 살펴보겠습니다.
구성 요소 수명 주기
모든 Svelte 구성 요소에는 수명 주기가 있습니다. 생성될 때 시작되고 소멸될 때 끝납니다.
수명 주기의 중요한 순간에 코드를 실행할 수 있는 몇 가지 기능이 있습니다.
가장 많이 사용되는 것은
onMount
입니다. 컴포넌트가 DOM에 처음 렌더링된 후에 실행됩니다.다음과 같이 구성 요소에
onMount
처리기를 추가할 수 있습니다.<script>
import { onMount } from "svelte";
let joke = { value: { joke: "" } };
onMount(async () => {
const res = await fetch(`https://api.icndb.com/jokes/20`);
joke = await res.json();
});
</script>
<p>{joke.value.joke}</p>
위의 코드는 구성 요소가 로드될 때 농담을 받기 위해 Chuck Norris API를 호출합니다.
그런 다음 로드된 후 표시합니다.
onDestroy
onDestroy
의 콜백은 컴포넌트가 파괴될 때 호출됩니다.구성 요소가
onDestroy
의 콜백으로 들어갈 수 있을 때 실행되는 정리 코드 및 기타 모든 것.예를 들어 다음과 같이 작성할 수 있습니다.
<script>
import { onDestroy } from "svelte";
let seconds = 0;
const interval = setInterval(() => seconds++, 1000);
onDestroy(() => clearInterval(interval));
</script>
<p>Seconds: {seconds}</p>
위의 코드에서
setInterval
을 호출하고 interval
값으로 설정한 간격 ID 개체를 반환합니다.그런 다음 구성 요소가 파괴될 때
clearInterval
을 호출하여 interval
콜백에서 clearInterval
을 onDestroy
으로 전달하여 메모리에서 간격 개체를 지웁니다.업데이트 전과 후업데이트
beforeUpdate
은 DOM이 업데이트되기 직전에 실행됩니다.afterUpdate
은 DOM이 데이터와 동기화되면 코드를 실행하는 데 사용됩니다.예를 들어 div가 창 높이를 넘었을 때 div의 맨 아래로 스크롤하려는 경우 다음 코드를 작성할 수 있습니다.
<script>
import { beforeUpdate, afterUpdate } from "svelte";
let div;
let autoscroll;
let arr = [];
setTimeout(() => {
arr = new Array(100).fill("foo");
}, 100);
beforeUpdate(() => {
autoscroll = div && div.offsetHeight + div.scrollTop > div.scrollHeight - 20;
});
afterUpdate(() => {
if (autoscroll) {
window.scrollTo(0, div.scrollHeight);
}
});
</script>
<div bind:this={div}>
{#each arr as a}
<p>{a}</p>
{/each}
</div>
코드:
div && div.offsetHeight + div.scrollTop > div.scrollHeight - 20
div의 높이가 화면에 표시되지 않는 높이를 포함하는 스크롤 높이보다 큰지 확인합니다.
그런 다음
afterUpdate
콜백에서 위의 부울에서 반환된 오버플로가 있는 경우 div의 맨 아래로 스크롤할 수 있습니다.진드기
tick
은 보류 중인 상태 변경 사항이 DOM에 적용되는 즉시 해결되는 약속을 반환하는 함수입니다.구성 요소 상태가 Svelte에서 무효화되면 DOM을 즉시 업데이트하지 않습니다. 적용해야 할 변경 사항이 있는지 확인하기 위해 다음 마이크로 작업까지 기다립니다.
이렇게 하면 업데이트를 일괄 처리할 수 있습니다.
텍스트 영역에서 텍스트 범위를 선택하고 탭 키를 눌러 대소문자를 전환하면 현재 선택이 지워지고 커서가 끝으로 이동합니다.
다음 코드를 작성하여 Textarea에서 탭 키를 누른 후에도 선택을 유지할 수 있습니다.
<script>
import { tick } from "svelte";
let text = "";
async function handleKeydown(event) {
if (event.which !== 9) return;
event.preventDefault();
const { selectionStart, selectionEnd, value } = this;
const selection = value.slice(selectionStart, selectionEnd);
const replacement = /[a-z]/.test(selection)
? selection.toUpperCase()
: selection.toLowerCase();
text =
value.slice(0, selectionStart) + replacement + value.slice(selectionEnd);
await tick();
this.selectionStart = selectionStart;
this.selectionEnd = selectionEnd;
}
</script>
<textarea bind:value={text} on:keydown={handleKeydown}></textarea>
위의 코드에는 탭 키가 눌렸는지 확인하기 위한
handleKeydown
이 있습니다.text
을 이전과 동일한 내용으로 설정하여 텍스트가 변경되지 않도록 합니다.그렇다면 선택을 유지하기 위해
selectionStart
이 호출된 후 selectionEnd
및 tick
을 설정합니다.결론
수명 주기 메서드를 사용하여 수명 주기 단계에서 원하는 코드를 실행할 수 있습니다.
구성 요소가 로드될 때 하나, 구성 요소가 파괴될 때 하나, DOM 업데이트용으로 하나, 구성 요소 상태가 업데이트될 때용 하나가 있습니다.
Reference
이 문제에 관하여(Svelte 구성 요소 수명 주기 후크), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aumayeung/svelte-component-lifecycle-hooks-aon텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)