[React] Zustand 기본 사용법 정리
포스트
취소

[React] Zustand 기본 사용법 정리

들어가며

React 프로젝트가 커지면 여러 컴포넌트에서 같은 상태를 공유해야 하는 상황이 생깁니다.

props로 계속 내려보내면 props drilling이 생기고, Context API만으로 관리하면 상태가 많아질수록 구조가 복잡해질 수 있습니다.

Zustand는 이런 전역 상태를 가볍고 단순하게 관리할 수 있게 도와주는 라이브러리입니다.


설치하기

1
npm install zustand

yarn을 사용한다면 다음 명령어로 설치할 수 있습니다.

1
yarn add zustand

기본 store 만들기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// store/useCounterStore.ts
import { create } from "zustand";

interface CounterState {
  count: number;
  increase: () => void;
  decrease: () => void;
  reset: () => void;
}

export const useCounterStore = create<CounterState>((set) => ({
  count: 0,
  increase: () => set((state) => ({ count: state.count + 1 })),
  decrease: () => set((state) => ({ count: state.count - 1 })),
  reset: () => set({ count: 0 }),
}));

create로 store를 만들고, 그 안에 상태와 상태를 변경하는 액션 함수를 정의합니다.


컴포넌트에서 사용하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import { useCounterStore } from "@/store/useCounterStore";

const Counter = () => {
  const { count, increase, decrease, reset } = useCounterStore();

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={increase}>+</button>
      <button onClick={decrease}>-</button>
      <button onClick={reset}>reset</button>
    </div>
  );
};

export default Counter;

이제 어느 컴포넌트에서든 useCounterStore를 호출해 같은 상태를 공유할 수 있습니다.


필요한 상태만 구독하기

컴포넌트에서 store 전체를 가져오면 store 안의 다른 값이 바뀔 때도 렌더링에 영향을 줄 수 있습니다.

필요한 값만 선택해서 구독하면 더 효율적입니다.

1
2
const count = useCounterStore((state) => state.count);
const increase = useCounterStore((state) => state.increase);

이렇게 작성하면 해당 컴포넌트는 자신이 선택한 값의 변경에만 반응합니다.


Zustand의 장점

Zustand는 별도의 Provider로 앱을 감싸지 않아도 사용할 수 있습니다.

또한 store 코드가 비교적 짧고, 상태와 액션을 한곳에 모아두기 쉽습니다.

작은 프로젝트부터 중간 규모 프로젝트까지 부담 없이 적용하기 좋습니다.


마무리

Zustand는 React에서 전역 상태를 간단하게 관리할 수 있는 라이브러리입니다.

create로 store를 만들고, 컴포넌트에서는 만들어진 hook을 호출해 상태와 액션을 사용합니다.

상태가 많아질수록 필요한 값만 선택해서 구독하는 습관을 들이면 렌더링 관리에도 도움이 됩니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

[JavaScript] 최근 검색어 저장 기능 만들기

[React] Zustand persist로 새로고침 후에도 상태 유지하기