A small, fast and scalable bearbones state-management solution using simplified flux principles. Has a comfy API based on hooks, isn't boilerplatey or opinionated.
간단한 Flux 원칙을 사용하는 작고 빠르고 확장 가능한 상태 관리 솔루션
MVC 패턴을 보완하는 프론트엔드 디자인 패턴
상태를 변경하고자 한다면 Action을 만들어 Dispatcher에 전달하면 Dispatcher가 Action에 따라 Store(Model)의 데이터를 변경하고 그 변경사항을 View에 반영하는 단방향 흐름
부모 컴포넌트 쪽에 Context.Provider
컴포넌트를 선언하고 Context로 전달되는 값이 변경될 때 해당 Context를 사용하는 모든 자손 컴포넌트는 리랜더링된다.
npm install zustand # or yarn add zustand
import { create } from 'zustand'
const useBearStore = create((set) => ({
bears: 0,
increasePopulation: () => set((state) => ({ bears: state.bears + 1 })),
removeAllBears: () => set({ bears: 0 }),
}))
set
함수는 상태를 병합한다.function BearCounter() {
const bears = useBearStore((state) => state.bears)
return <h1>{bears} around here ...</h1>
}
function Controls() {
const increasePopulation = useBearStore((state) => state.increasePopulation)
return <button onClick={increasePopulation}>one up</button>
}
// #1 select 함수를 사용해 import 하여 사용하기
const isLogin = useStore((state) => state.isLogin);
// #2 구조분해 할당을 통해 가져오기
const { isLogin } = useStore();
먼저 Chrome 웹 스토어에서 Redux DevTools를 설치한 뒤, Zustand가 지원하는 Middleware인 Devtools를 사용한다.
import { create } from 'zustand'
import { devtools } from 'zustand/middleware'
const useBearStore = create((set) => ({
bears: 0,
increasePopulation: () => set((state) => ({ bears: state.bears + 1 })),
removeAllBears: () => set({ bears: 0 }),
}))
const useStore = create(devtools(store))
export default useStore