Redux와, Zustand는 React 상태관리 라이브러리로, 두가지 라이브러리 다 Flux 패턴이다.
Flux 패턴이란?
단방향 데이터 흐름을 구현하기 위한 클라이언트 사이드 웹 어플리케이션 아키텍쳐 패턴
데이터를 예층 가능하게 하고, 데이터 흐름의 복잡성을 해결하는 장점이 있다.
MVC 패턴과, Flux 패턴를 비교를 해보자.
MVC 패턴 | Flux 패턴 | |
구조 | ||
데이터 흐름 | 양방향 | 단방향 |
특징 |
|
|
Zustand | Redux |
복잡한 상태 관리가 필요 없는 작은 규모의 프로젝트에 적합한 가벼운 상태 관리 라이브러리 | 복잡한 상태 관리를 필요로 하고 긴 개발 기간이 소요되는 큰 규모의 프로젝트에 알맞는 강력한 상태 관리 라이브러리 |
간단하고 직관적인 API를 제공 | 구조적이고 표준화 된 상태 관리 방식 |
Redux보다 더 간결한 방법으로 상태 관리 | 일관성과 팀 멤버간의 협력을 유지 |
서버 상태 관리 | 클라이언트 상태 관리에 좋은 툴 |
Provider로 감싸주지 않아도 된다. |
Provider로 감싸야 한다. |
Zustand
import { create } from 'zustand'
type State = {
count: number
}
type Actions = {
increment: (qty: number) => void
decrement: (qty: number) => void
}
const useCountStore = create<State & Actions>((set) => ({
count: 0,
increment: (qty: number) => set((state) => ({ count: state.count + qty })),
decrement: (qty: number) => set((state) => ({ count: state.count - qty })),
}))
Redux
import { createStore } from 'redux'
import { useSelector, useDispatch } from 'react-redux'
type State = {
count: number
}
type Action = {
type: 'increment' | 'decrement'
qty: number
}
const countReducer = (state: State, action: Action) => {
switch (action.type) {
case 'increment':
return { count: state.count + action.qty }
case 'decrement':
return { count: state.count - action.qty }
default:
return state
}
}
const countStore = createStore(countReducer)
참고
- https://dokit.tistory.com/32
- https://docs.pmnd.rs/zustand/getting-started/comparison
- https://velog.io/@jaewoneee/%EB%B2%88%EC%97%AD-Zustand-vs-Redux
- https://ji-musclecode.tistory.com/32
- https://velog.io/@jyooj08/Zustand-%ED%95%9C-%EB%B0%A9%EC%97%90-%EC%A0%95%EB%A6%AC
'Front-end' 카테고리의 다른 글
2023년 기술 블로그 회고 (1) | 2024.01.01 |
---|---|
Web Worker (0) | 2024.01.01 |
Redux-saga (0) | 2024.01.01 |
React useCallback (0) | 2023.12.04 |
코드 스플리팅(Code Splitting) (0) | 2023.12.02 |