Web/React

zustand

zkzk7290 2024. 11. 3. 00:47
반응형
zustand : 전역 상태 관리 
1. 개념 ==> 상태를 의미  - React에서 사용되는 전역 상태 관리 라이브러리 중 하나 

2. 장점 : 간결성  구독 최적화, 유연성, 접근성 
  • 3. zustand의 형태(ts기준)
  • create 함수를 사용하여 store(스토어)생성 
  • 해당 스토어를 통해 프로젝트 전역에서 데이터 접근 가능 
  • create 함수에 제네릭<>을 사용하여 함수 구조를 정의 
  • 전역 상태값(필드), 전역 상태 설정 함수 
  • store을 사용하는 이유: props drilling을 막기 위해서 
  • props drilling: React 애플리케이션에서 데이터를 전달하기 위해 필요한 과정을 설명하는 용어

 

 -creat 함수 내의 구조 

: set 함수를 통해 상태를 업데이트 

 (set) => ({해당 구조 내에서 제네릭 구조를 작성})

 

 

설치 코드 

리액트에서 zustand 설치 하는 코드 
npm i zustand

스토어 대한 구조 사진  -글이 봐도 잘 모르겠으면 한번 그려서 보세요 

 

스토어에 대한 코드
import { create } from "zustand";

// interface  스토어(전역 저장소)의 interface 정의  
interface CountStoreType{
  //상태 필드 정의 
  count: number; 
  //상태 업데이트 함수 
  increment: () => void;
  decrement: () => void;

}
 // 저장소 생성 함수 : create<저장소 구조 interface>();
 // 객체다 
 const useCountStore = create<CountStoreType>((set) => ({
  //상태 필드 초기화 
  count:0,
  increment: () => set((state) => ({
    count : state.count+1
  })),
  decrement: () => set((state) => ({
    count: state.count-1
  }))

})); 

export default useCountStore;

increment : () => -함수를 정의 이 함수를 호출될 때 상태 변경 

 

set((state) => ({...}))  -set 함수를 이용해서 상태 변경 

 

count : state.count+1:  현재 상태의 count 값에 +1 더해 상태 업데이트 

 

export default useCountStore:  저장소를 보내기라고 생각해 주시면  됨

 

 

 

 

import useCountStore from '../stores/count.store';
import useCartStoreType from '../stores/cart.store';



export default function E_zustand() {
  // state 
  //state : count  값에 대한 전역 상태 관리 //
  //객체가 반환  -  구존 분해 할당(우황에서 좌항으로)
  const{count, increment, decrement} =  useCountStore();
  const {items, addItem, removeItem, clearCart} =useCartStoreType();
  //return: zustand 전역 상태 관리에 대한 출력 
  return (
    <div style={{
      textAlign: "center",
      marginTop:"20px"
    }}>
      <h2>Zustand: Counter Example</h2>
      <p>{`Count: ${count}`}</p>

      <h2>Zustand : Cart Example</h2>
      <ul>
        { //타입 추론tS의 기능 
          items.map((item)=> (
            <li key={item.id} style={{marginBottom:'10px'}}>
                {item.name} -${item.price} X {item.quantity}
              <button onClick={() => removeItem(item.id)}
                style={{marginLeft:"10px", padding:"3px 5px"}}>
                삭제
              </button>
            </li>
          ))
        }
      </ul>
    </div>
  )
}

구조 분해 할당  -> 우에서 좌항으로 

 

 

 

https://www.heropy.dev/p/n74Tgc

 

Zustand 핵심 정리

Zustand(주스탠드)는 작고 빠르며 확장 가능한 React 프로젝트에서 사용하는 상태 관리(Store) 라이브러리입니다.

www.heropy.dev

 

 

반응형