최근 npm trend로 비교했을때 , 많은 개발자들이 직관적이고 사용하기 쉬운 상태관리로 채택하는 추세이다.
// store.tsx
import { create } from "zustand";
import { devtools } from "zustand/middleware";
type BearStore = {
bears: number;
increaseBear: () => void; // action type 지정
removeAllBears: () => void;
};
export const useBearStore = create<BearStore>()(
devtools((set) => ({ // devtools로 감싸서 debuging
bears: 0,
increaseBear: () => set((state) => ({ bears: state.bears + 1 })),
removeAllBears: () => set({ bears: 0 }),
}))
);
// ZustandComponent.tsx
import { useBearStore } from "../store/store"
const ZustandComponent = () => {
// STATE
const { bears, increaseBear, removeAllBears } = useBearStore();
return (
<>
<h2 className="text-4xl">{bears}</h2>
<button
className="py-2 px-4 border bg-slate-100 rounded-md"
onClick={() => increaseBear()}
>
Increase Bear
</button>
<button
className="py-2 px-4 border bg-slate-100 rounded-md"
onClick={() => removeAllBears()}
>
remove All Bear
</button>
</>
);
};
export default ZustandComponent;
다음과 같이 만들어 진 store를 import하여 필요한 곳에서 사용이 가능하다.
다른 컴포넌트와 특별한 차이점은 Component 외부에서 Action을 취할 수 있고, state에 대한 액션 네이밍이 커스텀이 가능한 부분이다.(전역변수 호출)