Zustand 와 React query는 대표적인 next.js의 전역 상태 관리 라이브러리이다.
프로젝트 작업 당시 Zustand를 설치만 하고 적용을 하진 않았다. 적용하기에 적합한 상태값을 찾지 못하기도 했다. 모바일 햄버거 버튼 메뉴를 페이지가 이동 할 경우에 무조건 닫힘으로 상태를 변경하기 위해 zustand를 사용하기로 결정.
//store.ts
import { create } from "zustand";
type TestState = {
open: Boolean;
toggleMenu: () => void;
}
export const useTestStore = create<TestState>((set)=>({
open: false,
toggleMenu: ()=>
set((state) => ({
open: !state.open
}))
}))
// .tsx
import {useTestStore} = from @/store/store.ts
const open = useTestStore((state) => state.open);
const toggleMenu = useTestStore((state)=> state.toggleMenu);
const { count, increase } = useCounterStore();
또는
const store = useCounterStore();
const count = store.count;
보다는
const count = useCounterStore((state) => state.count);
const increase = useCounterStore((state) => state.increase );
권장 >> store의 다른 값이 변경되어도 리랜더링 되지 않는다.
그럼 여러 값을 하나로 묶고 싶은 경우에는 어떻게 해야해?
function UserProfile() {
const userInfo = useUserStore(
(state) => ({
name: state.user.name,
age: state.user.age,
email: state.user.email,
})
);
console.log(userInfo);
return <UserCard user={userInfo} />;
}