반응형
요즘 가장 대세처럼 많이 사용한다고 여기저기 사용한 코드를 인수인계 받거나 블로그 글도 많이 보았는데, 그래서 정확히 뭔지 궁금해짐. 둘 다 전역 상태관리 라이브러리 아닌가? 그래서 두 라이브러리가 어떻게 다를까?
Jotai
jotai의 특징들
- Atomic 한 상태관리 (Recoil 과 유사)
- atom() 을 사용한 개별적인 상태를 정의 할 수 있음
- 이렇게 개별화된 atom을 useAtom() 으로 사용 가능
- 개별 atom단위로 구독
- atomWithAsync() 등등 으로 비동기 사용
- 상태가 독립적이거나 세분화된 경우에 사용하기 좋음
import { atom, useAtom } from 'jotai';
const countAtom = atom(0); // atom() 으로 상태 정의
function Counter() {
const [count, setCount] = useAtom(countAtom); // useAtom 으로 사용
return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>+1</button> // setCount() 를 통한 개별 업데이트
</div>
);
}
export default Counter;
Zustand
- Store 기반한 상태관리 (Redux 와 유사)
- create() 를 사용한 상태 정의와 액션 정의
- useStore(), useZustand() 로 상태 업데이트
- Store의 부분 상태를 구독 가능
- set() 으로 비동기 로직 사용 가능
- 여러 상태를 한 번에 관리할 수 있음
import { create } from 'zustand';
const useCounterStore = create((set) => ({ // store 정의
count: 0,
increase: () => set((state) => ({ count: state.count + 1 })), // set() 으로 상태를 변경
}));
function Counter() {
const { count, increase } = useCounterStore(); // 상태 구독
return (
<div>
<p>Count: {count}</p>
<button onClick={increase}>+1</button>
</div>
);
}
export default Counter;
최종 결론
둘 중 하나만 써도 무방하겠지만 각각 필요한 역활에 조합해서 쓰는게 좋아보인다.
데이터 관리는 zustand로 store에 저장하고, 테마 변경등의 독립적으로 상태를 구성하는 거는 jotai로 관리하는걸 추천한다고 한다.
import { atom, useAtom } from 'jotai';
import { create } from 'zustand';
// Zustand Store 정의
const useUserStore = create((set) => ({
user: { name: '홍길동', age: 25 },
setUser: (user) => set({ user }),
}));
// Jotai 상태 정의
const themeAtom = atom('light');
function Profile() {
const { user, setUser } = useUserStore();
const [theme, setTheme] = useAtom(themeAtom);
return (
<div style={{ background: theme === 'light' ? '#fff' : '#333', color: theme === 'light' ? '#000' : '#fff' }}>
<h2>{user.name}</h2>
<button onClick={() => setUser({ name: 'Bob', age: 30 })}>Change Name</button>
<button onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}>Toggle Theme</button>
</div>
);
}
export default Profile;
라떼는 redux 가 거의 유일무이였는데, 이제 다양한 관리 라이브러리도 나오는 걸 보니 계속 공부해야 겠음
반응형
'React' 카테고리의 다른 글
| React 성능 최적화: useMemo, useCallback, React.memo (0) | 2025.04.01 |
|---|---|
| NextJS 에서 SEO 설정하기 (0) | 2025.03.31 |
| 커스텀 hook 만들기 (0) | 2025.01.31 |
| 한글 초성 추출 하기 (7) | 2023.10.10 |
| React에서 clipboard에 copy&paste 하기 (0) | 2023.10.09 |