프로그래밍 언어/NEXT.JS

[NEXT.JS] Zustand

doomole 2024. 7. 31. 13:27
728x90

개요

Zustand는 간단하면서도 강력한 상태 관리 라이브러리입니다. React 애플리케이션에서 전역 상태를 쉽게 관리할 수 있게 해주며, Redux와 비교했을 때 훨씬 더 간단하고 직관적인 API를 제공합니다.

Zustand는 독일어로 "상태"를 의미하며, React의 Hooks를 기반으로 합니다.

 

 

특징

간단한 API

Zustand는 매우 간단한 API를 제공하여, 몇 줄의 코드만으로 상태를 정의하고 사용할 수 있습니다.

이는 Redux와 같은 복잡한 설정 없이도 쉽게 상태 관리를 할 수 있게 해줍니다.

import create from 'zustand';

const useStore = create(set => ({
  count: 0,
  increment: () => set(state => ({ count: state.count + 1 })),
  decrement: () => set(state => ({ count: state.count - 1 })),
}));

// 컴포넌트에서 상태 사용
const Counter = () => {
  const { count, increment, decrement } = useStore();
  return (
    <div>
      <h1>{count}</h1>
      <button onClick={increment}>Increment</button>
      <button onClick={decrement}>Decrement</button>
    </div>
  );
};

export default Counter;

 

미들웨어 지원

Zustand는 미들웨어를 지원하여 로컬 스토리지에 상태를 저장하거나 리덕스 개발자 도구와 통합할 수 있습니다.

이를 통해 상태 관리의 유연성과 확장성을 높일 수 있습니다.

import create from 'zustand';
import { devtools, persist } from 'zustand/middleware';

const useStore = create(
  devtools(
    persist(
      set => ({
        count: 0,
        increment: () => set(state => ({ count: state.count + 1 })),
      }),
      { name: 'count-storage' } // 로컬 스토리지 키 이름
    )
  )
);

 

선택적 구독

Zustand는 상태의 일부만 선택적으로 구독할 수 있도록 하여, 성능을 최적화하고 불필요한 리렌더링을 줄입니다.

이는 특히 대규모 애플리케이션에서 유용합니다.

import create from 'zustand';

const useStore = create(set => ({
  count: 0,
  increment: () => set(state => ({ count: state.count + 1 })),
}));

const Counter = () => {
  const count = useStore(state => state.count);
  const increment = useStore(state => state.increment);

  return (
    <div>
      <h1>{count}</h1>
      <button onClick={increment}>Increment</button>
    </div>
  );
};

export default Counter;

 

React Context와의 통합

Zustand는 React Context와 쉽게 통합할 수 있어, 상태를 전역으로 공유하는 데 유용합니다.

이는 기존의 Context API를 대체하거나 보완하는 데 사용할 수 있습니다.

import create from 'zustand';

const useStore = create(set => ({
  darkMode: false,
  toggleDarkMode: () => set(state => ({ darkMode: !state.darkMode })),
}));

const ThemeToggle = () => {
  const { darkMode, toggleDarkMode } = useStore();

  return (
    <button onClick={toggleDarkMode}>
      {darkMode ? 'Switch to Light Mode' : 'Switch to Dark Mode'}
    </button>
  );
};

export default ThemeToggle;

 

 

설치

npm install zustand
또는
yarn add zustand

 

 

문의사항이나 피드백은 댓글로 남겨주세요.

 

 

'프로그래밍 언어 > NEXT.JS' 카테고리의 다른 글

[NEXT.JS] 없는 페이지 처리(Not Found Page)  (0) 2024.09.04
[NEXT.JS] Dynamic Import  (2) 2024.09.04
[NEXT.JS] SWR  (0) 2024.07.31
[NEXT.JS] Axios  (0) 2024.07.31
[NEXT.JS] Express.js  (0) 2024.07.31