Svelte 앱에 공유 상태 저장하기
지금 http://jauyeung.net/subscribe/에서 내 이메일 목록을 구독하십시오.
Svelte는 프론트 엔드 웹 앱 개발을 위한 떠오르는 프론트 엔드 프레임워크입니다.
사용이 간편하고 결과를 빠르게 생성할 수 있습니다.
이 기사에서는 Svelte 저장소에 공유 상태를 저장하는 방법을 살펴보겠습니다.
쓰기 가능한 저장소
여러 구성 요소에서 공유하는 데이터를 저장하기 위해 쓰기 가능한 저장소를 추가할 수 있습니다.
예를 들어 다음을 작성하여 저장소를 만들고 구성 요소에서 사용할 수 있습니다.
App.svelte
:<script>
import { count } from "./stores.js";
let countValue;
const unsubscribe = count.subscribe(value => {
countValue = value;
});
const increment = () => {
count.update(n => n + 1);
};
</script>
<button on:click={increment}>Increment</button>
<p>{countValue}</p>
stores.js
:import { writable } from "svelte/store";
export const count = writable(0);
위의 코드에서
stores.js
라고 하는 count
공유 쓰기 가능 상태를 만들었습니다.그런 다음 최신 값을 가져오고
count_value
로 설정하기 위해 구독했습니다.set
에서 count
메서드를 호출하여 다음과 같이 값을 재설정할 수도 있습니다.App.svelte
:<script>
import { count } from "./stores.js";
let countValue;
const unsubscribe = count.subscribe(value => {
countValue = value;
});
const increment = () => {
count.update(n => n + 1);
};
const reset = () => {
count.set(0);
};
</script>
<button on:click={increment}>Increment</button>
<button on:click={reset}>Reset</button>
<p>{countValue}</p>
위의 코드에서 재설정을 클릭하여
count.set(0)
상태를 0으로 설정할 때 count
를 실행합니다.상태 구독에 사용되는 리소스를 해제할 수 있도록 구성 요소가 파괴될 때 저장소에서
unsubscribe
를 호출해야 합니다.예를 들어 위의 예를 다음과 같이 수정할 수 있습니다.
App.svelte
:<script>
import { count } from "./stores.js";
import { onDestroy } from "svelte";
let countValue;
const unsubscribe = count.subscribe(value => {
countValue = value;
});
const increment = () => {
count.update(n => n + 1);
};
onDestroy(unsubscribe);
</script>
<button on:click={increment}>Increment</button>
<p>{countValue}</p>
위의 코드는
unsubscribe
상태가 더 이상 구독되지 않도록 구성 요소 수명 주기의 destroy
부분에서 함수를 호출count
합니다.스토어 상태 구독을
$
로 대체할 수 있습니다. 예를 들어 위의 예를 다음과 같이 줄일 수 있습니다.<script>
import { count } from "./stores.js";
import { onDestroy } from "svelte";
const increment = () => {
count.update(n => n + 1);
};
</script>
<button on:click={increment}>Increment</button>
<p>{$count}</p>
count
저장소에서 구독 및 구독 취소하는 코드를 제거했으며 구성 요소는 여전히 이전과 동일하게 작동합니다.읽기 전용 상점
readable
함수로 읽기 전용 스토어를 만들 수 있습니다.예를 들어 다음 코드를 작성하여 다음과 같이 구성 요소가 구독하는 카운터 상태를 만들 수 있습니다.
stores.js
:import { readable } from "svelte/store";
export const count = readable(0, set => {
let count = 0;
const interval = setInterval(() => {
set(count);
count++;
}, 1000);
return () => {
clearInterval(interval);
};
});
App.svelte
:<script>
import { count } from "./stores.js";
</script>
<p>{$count}</p>
위의 코드에서는 상점에서
readable
함수를 호출합니다. 두 번째 인수에서 set
함수를 매개변수로 사용하여 콜백을 전달합니다. 이 함수는 상점 값을 업데이트하기 위해 호출됩니다.setInterval
콜백에서 그렇게 했습니다. 그런 다음 상점이 구독 취소될 때 코드를 정리하는 데 사용되는 다른 함수를 반환합니다.코드를 실행하면 화면에 1초마다 1씩 증가하는 숫자가 표시됩니다.
파생된 상태로 저장
derived
함수를 호출하여 다른 상태에서 파생된 저장소를 만들 수 있습니다.예를 들어 다음과 같이 위에 있는
count
상태의 두 배인 값을 내보내는 저장소를 만들 수 있습니다.stores.js
:import { readable, derived } from "svelte/store";
export const count = readable(0, set => {
let count = 0;
const interval = setInterval(() => {
set(count);
count++;
}, 1000);
return () => {
clearInterval(interval);
};
});
export const doubleCount = derived(count, $count => $count * 2);
App.svelte
:<script>
import { count, doubleCount } from "./stores.js";
</script>
<p>{$count}</p>
<p>{$doubleCount}</p>
위의 코드에는
doubleCount
저장소가 있습니다. 이 저장소는 첫 번째 인수로 전달된 derived
저장소와 값에서 파생하려는 값을 반환하는 콜백으로 count
함수를 호출하여 생성됩니다. count
에서 두 번째 인수로 내보냅니다.그런 다음 우리는 1초마다 1씩 증가하는 숫자와 1초마다 2씩 증가하는 숫자를 봅니다.
스토어 바인딩
저장소가 쓰기 가능한 경우 저장소의 값에 직접 바인딩할 수 있습니다.
예를 들어
bind:value
를 사용하여 입력된 값에 직접 상점을 바인딩하고 다음과 같이 상점의 값을 조작할 수 있습니다.store.js
:import { writable } from "svelte/store";
export const name = writable("");
App.svelte
:<script>
import { name } from "./stores.js";
</script>
<input bind:value={$name}>
<button on:click="{() => $name += '.'}">
Add period
</button>
<p>{$name}</p>
위의 코드에서 입력에 무언가를 입력할 때와 마침표 추가를 클릭할 때
$name
값을 변경합니다.그런 다음 p 요소에
$name
저장소의 값을 표시합니다.결론
저장소는 공유 상태를 저장하는 데 편리합니다. 우리는 읽기 전용, 쓰기 가능 또는 다른 저장소에서 파생된 저장소를 만듭니다.
Reference
이 문제에 관하여(Svelte 앱에 공유 상태 저장하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aumayeung/storing-shared-state-in-a-svelte-app-2lo0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)