솔미는 성장중

너무 많은 상태관리 라이브러리! 뭐를 사용해야 할까? (feat. Recoil, Jotai, Zustand) 본문

react

너무 많은 상태관리 라이브러리! 뭐를 사용해야 할까? (feat. Recoil, Jotai, Zustand)

solming 2024. 2. 18. 20:00
728x90

Recoil

- RecoilRoot를 선언해 하나의 스토어를 만들고, atom이라는 상태단위를 스토어에 등록한다. 

 

- RecoilRoot: Recoil에서 생성되는 상태값을 저장하기 위한 스토어를 생성 + 변경된 상태를 하위 컴포넌트로 전파해 컴포넌트에 리렌더링을 일으킴

- atom: 상태를 나타내는 recoil의 최소 상태 단위. 각 값은 고유한 key 값을 바탕으로 구별된다.

 

컴포넌트는 recoil에서 제공하는 훅(useRecoilValue, useRecoilState..)을 통해 상태 변화를 구독하고, 값이 변경되면 forceUpdate 같은 기법을 통해 리렌더링을 실행해 최신 atom을 가져오게 된다.

 

 

Jotai

- recoil의 atom 모델에 영감 받아 만들어진 상태관리 라이브러리

- 상향식 접근법 (작은 단위의 상태를 위로 전파할 수 있는 구조)

   : 리액트 Context의 문제점인 불필요한 리렌더링이 리어난다는 문제를 해결하고자 설계 (별도의 메모이제이션 필요없음!)

 

- atom: 최소 단위의 상태.

              atom 하나만으로도 상태를 만들 수도, 또 이에 파생된 상태를 만들수도있다.

 

  Recoil Jotai
atom key값 필요 별도 관리 불필요
(WeakMap 방식 덕분에!
store에 atom 객체 그 자체를 키로 활용하는 Map 값을 저장)
상태변화 구독하는 훅 useRecoilValue, useRecoilState useAtomValue, useAtom
atom에서 파상된 값 만들기 selector 필요 atom 만으로 가능
( 값뿐만 아니라 함수를 인수로 받을 수 있다는 특징이 있기 때문! )

 

 

atom 형태 상태관리를 선호하지만, Recoil은 정식 버전이 출시되지 않아 망설여질 땐 Jotai를 선택하자!

 

 

Zustand

- 리덕스에 영감을 받아 만들어진 상태관리 라이브러리

- 하나의 스토어를 중앙 집중형으로 활용해 이 스토어 내부에서 상태를 관리하는 방식

 

- store는 그 어떤 프레임워크와는 별개로 완전히 독립적으로 구성되어 있어서 순수하게 JS 환경에서도 사용가능

스토어 생성방법

1. create를 이용해 스토어 만들고 이 스토어를 useCounterSotre로 내부에서 사용

- 리액트 컴포넌트 외부에 store를 만들땐 createStore로 만들고 useStore훅으로 가져와 사용

 

리덕스에 비해 매우 간단하고 빠르게 상태를 정의할 . 수있다.

가벼운 라이브러리 크기

타입스크립트 기반이기에 별도 처리 필요없음.

미들웨어 지향(persist: 데이터 영구 보존, immer: 복잡한 객체를 쉽게 관리하도록 도와줌, ....)

 

 

상태 관리하는 방식에는 차이가 조금씩 있지만, 리액트에서 리렌더링을 일으키기 위한 방식은 제한적이기 때문에 리렌더링을 만드는 방법은 모두 비슷

 

728x90