차세대 상태관리 라이브러리 'zustand'에 대해 알아보자.
프론트 분야는 변화가 빠르게 성장한다. 그 중에서도 특히 상태관리는 다양한 툴들이 등장하고 발전해 나가고 있다. 가장 오래되고 유명한 상태관리를 떠올리면 단연 '리덕스'일 것이다.
하지만 요즘에는 여러가지 이유로 '리덕스'보다는 다른 도구를 선택하는 추세다.
주목받고 있는 라이브러리로 'jotai','zustand','recoil'이 있다.
그 중 zustand
가 가장 사용량이 높다. recoil은 페이스북 개발진이 만들었다는 신뢰성이 있지만 zustand에 비해 버전 업데이트가 매우 느리다.
-> recoil: v0.7.2 zustand: v4.0.0 zotai: v1.6.5
npm install zustand
// store.js
import create from "zustand";
const useStore = create((set) => ({
count: 0,
increase: () => set((state) => ({count: state.count + 1 }))
}));
export default useStore;
zustand에서 create함수를 꺼내온다.
useStore
저장소는 상태에 관한 변수들을 저장할 수 있는 곳이다.
import useStore from "store";
function App() {
const { count } = useStore();
return(
<div className="App">
<p>{count}</p>
</div>
)
}
셀렉터 함수를 전달하지 않으면 스토어 전체가 반환된다.
// store.js
const useStore = create((set) => ({
count: 0,
increase: () => set((state) => ({count: state.count + 1 }))
}));
function App() {
const { count, increase } = useStore();
return(
<div className="App">
<p>{count}</p>
<button onClick={()=>{increase()}>증가</button>
</div>
)
}
set함수는 상태를 변경하는 함수로 create 함수에 Set을 변수로 넣어 원하는 함수를 정의할 수 있다.
상태변수가 너무 많아서 관리하기 힘들 때에는 useStore를 나눠서 각 각 관리할 수도 있다.
const useStore1 = create((set) => ({
...
}));
const useStore2 = create((set) => ({
...
}));
이외에도 ajax요청, 디버깅, 미들웨어도 가능하다.