카테고리 없음
Svelte Store (전역 상태 관리)
DevilFront
2023. 5. 18. 12:33
반응형
React를 만져본 분이라면 Redux, Recoil, ContextApi 등 컴포넌트 별로 상태값을 전달 하는게 아닌 컴포넌트들과 동 떨어져 있는 한 장소에서 값을 관리하여 props를 통해 애써서 컴포넌트 별로 전달하고 받을 필요가 없어지는 것이다.
위 사진은 7번 컴포에서 10번 컴포로 props를 통해 값이 변하는것을 전달하는 과정인데 규모가 그리 크지 않음에도 벌써 귀찮을 거 같은 느낌이 든다.
Store와 같은 전역 상태 관리 도구를 썻을 때 단계이다. 쇽쇽쇽쇽쇽쇽에서 쇽쇽으로 바꼇다. 이것만 봐도 애용해야 될 이유는 충분하다.
사용하기 위해서는 우선
* store로 사용할 파일(저장소)를 만드는 것이다.
먼저 countStore.js 코드를 살펴보면
import {writable} from "svelte/store";
export const count = writable(0); //슈퍼 간단
여기서 사용할 4개의 컴포넌트 코드를 살펴보면
Main.svelte (App.svelte에서 가져갈 총합 페이지)
<script>
import Decrement from "./Decrement.svelte";
import Increment from "./Increment.svelte";
import Result from "./Result.svelte";
</script>
<Decrement /> // no props
<Increment /> // no props
<Result /> // no props
Increment.svelte
<script>
import {count} from "../store/countStore.js";
const onIncre = () =>{
$count = $count + 1; // store에서 가져온 값은 $표시를 붙여야 한다. 사용법 끝
}
</script>
<button on:click={onIncre}>
+
</button>
Result.svelte
<script>
import {count} from "../store/countStore.js";
</script>
<div>count 값 : {$count}</div> // 말했듯이 $ 표시
이렇게 하면 store를 사용 하는 방법 중 1가지를 알게 된 것이고 조금 더 오류를 줄이고 재사용성 있게 사용하는 방법은 외부 컴포넌트에서 count 값을 컨트롤하는게 아닌 store에서 관리 하는 것인데
바뀐 store.js 파일을 보면
import {writable} from "svelte/store";
function createCountStore() {
const {subscribe, set, update} = writable(0);
const increment = () => update(count => count + 1);
const decrement = () => update(count => count - 1);
const reset = () => set(0);
return{
subscribe,
increment,
decrement,
reset
}
}
export const count = createCountStore()
Increment.svelte
<script>
import {count} from "../store/countStore.js";
const onIncre = () =>{
count.increment(); // 꺼내쓰면 된다.
}
</script>
<button on:click={onIncre}>
+
</button>
관리포인트가 바뀐 것을 볼 수 있다.
반응형