티스토리 뷰
zutand 는 react 상태 관리 라이브러리(중앙 집중형 스토어) 중 하나로, 최근 들어 redux 보다 편하고 가볍기 때문에 많이 사용하고 있는 추세입니다.
우선 상태관리 라이브러리는 왜 쓰는지 알꺼기 때문에 디테일한 설명을 들어가지 않습니다~~.
실제로 github stars 를 보면, 많은 사용자가 쓰고 있고 라이센스도 MIT 를 사용하고 있습니다.
설치
yarn add zustand
예제
import { create } from "zustand";
const counterStore = (set) => ({
count: 0,
increment: (val) => set((state) => ({ count: state.count + (val ?? 1) })),
decrement: (val) => set((state) => ({ count: state.count - (val ?? 1) })),
reset: () => set(() => ({ count: 0 })),
});
const useCounterStore = create(counterStore);
export { useCounterStore };
이런 식으로 사용할 수 있고 만약에 devtools 기능을 쓰고 싶으면, zustand/middleware 를 사용하면 됩니다.
import { create } from "zustand";
import { devtools } from "zustand/middleware"
const counterStore = (set) => ({
count: 0,
increment: (val) => set((state) => ({ count: state.count + (val ?? 1) })),
decrement: (val) => set((state) => ({ count: state.count - (val ?? 1) })),
reset: () => set(() => ({ count: 0 })),
});
const useCounterStore = create(devtools(counterStore));
export { useCounterStore };
센스 있으신 분들은 이제 devtools 가 상용버전에서는 사용이 되지 않도록 처리하면 되겠죠?!?
자 이제 위에처럼 했으면 셋팅은 완료되었습니다. 이제 단순히 사용하면 끝입니다!
아래에서 이제 zustand 에 선언한 store 를 가져와서 count, increment, decrement 를 가져와 줍니다.
그래서 각 mode 에 따라 count 를 하나씩 증가시켜봅시다!!! redux 개발자도구도 가서 state 가 최신화 되는지도 같이 확인해봅시다!
import { startTransition } from "react";
import { useCounterStore } from "@zustand/counter";
import { Button } from "antd";
function CounterBtn() {
const { count, increment, decrement } = useCounterStore();
const degree = 1;
const counterBtnHanlder = (mode, e) => {
e.stopPropagation();
if (mode === "increment") {
startTransition(() => {
increment(degree);
});
} else {
startTransition(() => {
decrement(degree);
});
}
};
return (
<div>
<Button type="primary" onClick={(e) => counterBtnHanlder("increment", e)}>
증가!!
</Button>
<Button type="dashed" onClick={(e) => counterBtnHanlder("decrement", e)}>
감소!!
</Button>
<span style={{ color: "#fff" }}>{count}</span>
</div>
);
}
export default CounterBtn;
참고
devtools 의 기능의 경우, 개발 환경을 구분지어주는게 좋기 때문에 아래와 같이 모듈형태로 셋팅했다.
import { devtools } from "zustand/middleware";
const zsEnvDevtools = (store) => {
const prod = import.meta.env.PROD;
const useStore = prod ? store : devtools(store);
return useStore;
};
export default zsEnvDevtools;
'개발.. > React' 카테고리의 다른 글
React 에서 vite.config.js 경로 alias 설정 (0) | 2024.06.28 |
---|---|
vite 기반 React 에서 console.log 기반 디버그 모드 구현하기 (0) | 2024.06.27 |
StoryBook 사용해보기 (0) | 2024.05.05 |
createBrowserRouter 사용하여 라우팅 하기 (0) | 2024.04.28 |
React Hook Form@7 (0) | 2024.04.25 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- webpack
- 깃허브
- docker
- cors
- 오블완
- Vite
- 서버 to 서버
- NUXT
- dockerfile
- React
- vscode
- nuxt2
- Storybook
- 타입스크립트
- seo
- NextJS
- vue router
- nodejs
- vue composition api
- openAI
- nextjs13
- 스벨트
- 네이버 서치 어드바이저
- Embedding
- 티스토리챌린지
- AWS
- Github Actions
- nextjs14
- svelte
- Git
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함