일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Github Pages
- CSS
- supabase
- JavaScript
- nosql
- Cloud
- data
- this
- Protocol
- HTML
- TMDB
- http
- github
- Boostrap
- jQuery
- db
- firestoredatabase
- Fetch
- SQL
- W
- 배포
- REACT
- url
- useEffect
- til
- bootstrap
- IntersectionObserver
- web
- API
- Database
- Today
- Total
072DATA
리액트 상태 관리 라이브러리 비교 Context API, Redux, Zustand 본문
공부하다보니 상태 관리 라이브러리에 대해서 정리하면 도움이 될 것 같아서 정리해보려고 한다
상태 관리의 필요성
리액트에서는 컴포넌트의 상태를 props와 state를 통해 관리하는데
다음과 같은 상황에서는 효율적인 상태 관리가 어렵다.
- 여러 컴포넌트가 동일한 상태를 공유해야 하거나 상태 구조가 복잡해질 때.
- 컴포넌트 트리 구조에서 상태를 여러 단계에 걸쳐 전달해야 할 때 (prop drilling이라고 함).
- 로그인 정보나 테마 설정 등 전역에서 사용되는 상태를 관리할 때.
이러한 문제를 해결하기 위해 상태 관리 라이브러리를 사용함
각 라이브러리마다 특징과 장단점을 가지고 있고
프로젝트에 알맞은 도구를 선택하는 것이 중요하다고 생각한다
Context API
Context API는 리액트에 내장된 상태 관리 기능인데 컴포넌트 트리를 통해서 전역 상태를 공유할 수 있다
createContext와 useContext를 사용하여 상태를 생성하고 Provider 컴포넌트를 통해서 하위 컴포넌트로 전달한다
장점
- 리액트 자체 기능이므로 별도의 설치가 필요 없음
- 간단한 상태 공유와 전역 상태 관리에 적합
- 상태가 많이 변하지 않는 경우 불필요한 리렌더링이 적음
단점
- Provider의 값이 바뀌면 해당 Provider를 사용(구독?)하는 모든 하위 컴포넌트가 리렌더링됨
- 상태가 복잡해지거나 트리가 깊어질수록 관리가 어려워질 수 있음
Redux
Redux는 프로젝트의 전역 상태를 하나의 중앙 저장소에 관리하여 action과 reducer를 통해서 상태를 갱신함
상태 관리가 필요한 큰 규모의 프로젝트에서 유용하게 사용이 가능함
장점
- 전역 상태를 하나의 스토어에서 관리해 상태를 추적하기 편함
- Redux의 구조는 액션과 리듀서를 모듈화하여 상태를 체계적으로 관리할 수 있음 복잡한 플젝트의 상태를 잘 조직할 수 있게 해줌
단점
- 설정과 초기 설정이 다소 복잡할 수 있음(귀찮음..)
- Action, Reducer, Store 설정 등 반복적인 코드가 많이 필요함
Zustand
zustand는 가벼운 라이브러리이며 Redux와 Context APi의 장점을 합쳐 사용자에게 알맞은 APi 제공함
사용법도 간단하여 효율적인 상태 관리를 빠르게 설정할 수 이씀
장점
- Redux에 비해 훨씬 간결하고 직관적인 설정이 가능
- 전역 상태와 비동기 상태를 쉽게 관리할 수 있음.
- 상태를 구독하고 업데이트하는 데 필요한 코드를 훅 기반으로 제공하여 가독성이 좋음
단점
- 상태가 복잡해지면 의존성 관리가 까다로울 수 있다고 함
한줄로\ 정리하자면 각 라이브러리를 선택할 때 아래 사항을 고려하면 될듯
Context API는 비교적 단순한 전역 상태 관리에 적합
Redux는 강력한 관리 기능과 디버깅 도구를 제공하기 때문에 복잡한 상태와 큰 규모에서 사용이 적합
Zustand는 간단한 전역 상태 관리와 비동기 상태 관리에 최적화되었고 매번 반복해야하는 코드가 적음 -> 뭐든 무난
'FrontEnd > React' 카테고리의 다른 글
React의 성능 최적화 Hook -> useMemo & useCallback ( 깨알 감자 디바운스 ) (0) | 2024.11.07 |
---|---|
📅 아주아주 간단한 달력 구현 (0) | 2024.10.31 |
Suspense와 ErrorBoundary를 사용하여 간단히 로딩 및 에러 처리하기 (5) | 2024.09.18 |
zustand, 스토리지 활용하기 (세션, 로컬, persist) (0) | 2024.09.16 |
`React` 북마크 기능 구현하기 + 낙관적 업데이트 (5) | 2024.09.15 |