아래 강의를 수강하며 배운 내용을 정리한 글입니다
[한 입 크기로 잘라먹는 실전 프로젝트 - SNS 편 - 이정환] https://inf.run/SbJ8w
이전 글에 이어서 이번에는 zustand의 middlewares를 사용해 보겠습니다
← 이전 글 보기
[React] 전역 상태 관리 Zustand 사용해보기
가볍고 배우기 쉬운 간단한 사용법으로 react 상태 관리 라이브러리로 가장 많이 사용한다는 zustand를 처음 사용해 봤습니다react 프로젝트에 설치부터 사용까지 작성해 보겠습니다! https://zustand.doc
woooing.tistory.com
1. combine
상태와 함수를 합쳐주며 타입 자동 추론을 제공합니다
create(
combine({ count: 0 }, (set, get) => ({
actions: {
increase: () => {
set((state) => ({ count: state.count + 1 }));
},
decrease: () => {
set((state) => ({ count: state.count - 1 }));
},
},
})),
);
2. immer
상태를 직접 수정하는 방식으로 사용할 수 있습니다
사용을 위해서 아래 명령어를 통해 설치가 필요합니다
npm i immer
export const useCountStore = create(
immer(
combine({ count: 0 }, (set, get) => ({
actions: {
increase: () => {
// set((state) => ({ count: state.count + 1 }));
set((state) => {
state.count += 1;
});
},
decrease: () => {
// set((state) => ({ count: state.count - 1 }));
set((state) => {
state.count -= 1;
});
},
},
})),
),
);
3. subscribeWithSelector
특정 상태의 변화에 따라 반응(구독)할 수 있도록 해줍니다
export const useCountStore = create(
subscribeWithSelector(
immer(
combine({ count: 0 }, (set, get) => ({
actions: {
increase: () => {
set((state) => {
state.count += 1;
});
},
decrease: () => {
set((state) => {
state.count -= 1;
});
},
},
})),
),
),
);
useCountStore.subscribe(
(store) => store.count,
(count, prevCount) => console.log(count, prevCount),
);
4. persist
저장소에 상태를 저장해서 꺼내와 쓸 수 있도록 해줍니다
- name: 사용할 key값 (필수)
- partialize: 저장할 상태 선택
- storage: 저장소 지정 localStorage(기본값)/sessionStorage
export const useCountStore = create(
persist(
subscribeWithSelector(
immer(
combine({ count: 0 }, (set, get) => ({
actions: {
increase: () => {
set((state) => {
state.count += 1;
});
},
decrease: () => {
set((state) => {
state.count -= 1;
});
},
},
})),
),
),
{
name: "countStore",
partialize: (store) => ({
count: store.count,
}),
storage: createJSONStorage(() => sessionStorage),
},
),
);
5. devtools
상태변화를 개발자모드에서 쉽게 확인할 수 있도록 해줍니다
- name: Redux DevTools에 표시될 스토어명
https://chromewebstore.google.com/detail/redux-devtools/lmhkpmbekcpmknklioeibfkpmmfibljd?hl=ko
Redux DevTools - Chrome 웹 스토어
Redux DevTools for debugging application's state changes.
chromewebstore.google.com
export const useCountStore = create(
devtools(
persist(
subscribeWithSelector(
immer(
combine({ count: 0 }, (set, get) => ({
actions: {
increase: () => {
set((state) => {
state.count += 1;
});
},
decrease: () => {
set((state) => {
state.count -= 1;
});
},
},
})),
),
),
{
name: "countStore",
partialize: (store) => ({
count: store.count,
}),
storage: createJSONStorage(() => sessionStorage),
},
),
{ name: "countStore" },
),
);
* 미들웨어를 적용할 때에는 순서 또한 중요합니다
devtools > persist > subscribeWithSelector > immer > combine 순 추천
'React' 카테고리의 다른 글
| [React] Tanstack Query useMutation 사용해 보기 (0) | 2025.10.30 |
|---|---|
| [React] Tanstack Query 사용해 보기 (0) | 2025.10.29 |
| [React] 전역 상태 관리 Zustand 사용해보기 (0) | 2025.10.28 |
| [React] react-router v7 적용해보기 (0) | 2025.10.27 |
| [Tailwind CSS v4.1] 설치 및 사용해보기 (0) | 2025.10.23 |