이전까지 프로젝트를 진행할 때는 최상위 컴포넌트인 App.js에서 모든 데이터를 관리하고, 각 컴포넌트에 데이터를 props로 넘겨주는 방식
으로 작업했다. 하지만 이 방식으로 진행한다면 props 전달 depth가 깊어진다.
는 문제점이 발생하게 된다.
이를 해결하기 위해 전역 상태관리 라이브러리
적용의 필요성을 느꼈다.
보통은 상태관리를 Redux를 많이 사용하는 것으로 알고 있지만, Zustand의 사용법이 간단하다고 하여 학습을 진행했다.
Zustand에 대해 학습한 것을 기록하려고 한다.
Zustand의 특징은 다른 라이브러리보다 간단하게 사용할 수 있다는 것이다. 보일러플레이트 코드가 길지 않아서 편하다고 한다.
(보일러플레이트 코드란 최소한의 변경으로 여러 곳에서 재사용되며, 반복적으로 비슷한 형태를 띄는 코드를 말한다.)
npm install zustand --save
혹은
yarn add zustand
간단하다.
스토어를 생성하여 원하는 값(state)과 그 값을 업데이트 해주는 함수를 만들어준다.
import { create } from "zustand";
export const useCounterStore = create((set) => ({
count: 1,
increse: () => set((state) => ({ count: state.count + 1 })),
}));
useCounterStore라는 store를 만들었다.
state는 count이고, count를 1씩 증가시켜주는 함수는 increse 이다.
import React from "react";
import { useCounterStore } from "../Store";
const Counter = () => {
const { count, increse } = useCounterStore();
return (
<div className="counter">
<p>{count}</p>
<button onClick={increse}>1씩 증가</button>
</div>
);
};
export default Counter;
Counter 컴포넌트에서 이전에 만들어준 Store Hooks(useCounterStore)를 불러왔고, count 숫자와 1씩 증가 시켜주는 버튼을 배치했다.
실행 결과 1씩 증가
버튼을 누르면 위의 숫자가 증가되는 것을 확인할 수 있었다.
간단한 예시이지만 Zustand를 처음 사용해보는데도 불구하고 쉽게 사용할 수 있겠다는 생각이 많이 들었다. Store 생성 과정에서 함수 선언 방법만 익숙해진다면 유용하게 쓸 수 있을 것 같았다. 아직은 개념만 익힌 상태라 더 많은 개념 및 예시들을 찾아보며 더 학습해 볼 필요가 있다.
진행중인 프로젝트에서 Zustand로 로그인 상태 관리를 하게 될 예정이다. 시나리오를 구상해본다면
로 생각해볼 수 있었다. (다른 방법이 있을수도 !!)
새로운 라이브러리를 사용하여 로그인 기능을 구현 할 생각을 하니 벌써부터 떨리고 재밌을 것 같다 :)
패스트캠퍼스 올인원 패키지 : 만들면서 익히는 React의 모든것 개발부터 배포까지 with 25개 스택