본문 바로가기
Programming/React

zustand 사용 예(ts) - 회원 정보 관리 - 기초적이고 심플한 개인정보(CRUD) 코드 샘플

by web data 2026. 10. 16.

1. 스토어 정의 (src/store/useUserStore.ts)

import { create } from 'zustand';

// 1. 데이터 타입 정의
interface User {
  name: string;
  age: number;
}

// 2. 스토어 상태 및 액션 타입 정의
interface UserState {
  user: User | null;
  setProfile: (user: User) => void;     // Create / Save
  updateName: (name: string) => void;   // Update
  clearProfile: () => void;             // Delete
}

// 3. 스토어 생성
export const useUserStore = create<UserState>((set) => ({
  user: null,
  
  // 저장
  setProfile: (user) => set({ user }),
  
  // 이름만 부분 수정
  updateName: (name) => set((state) => ({
    user: state.user ? { ...state.user, name } : null
  })),
  
  // 삭제 (초기화)
  clearProfile: () => set({ user: null }),
}));

 

 

2. 리액트 컴포넌트 (src/App.tsx)

import React from 'react';
import { useUserStore } from './store/useUserStore';

export default function App() {
  // 스토어에서 상태와 액션 가져오기
  const user = useUserStore((state) => state.user);
  const setProfile = useUserStore((state) => state.setProfile);
  const updateName = useUserStore((state) => state.updateName);
  const clearProfile = useUserStore((state) => state.clearProfile);

  return (
    <div style={{ padding: '20px' }}>
      <h2>심플한 Zustand 개인정보 샘플</h2>

      {!user ? (
        <button onClick={() => setProfile({ name: '홍길동', age: 25 })}>
          개인정보 등록 (Create)
        </button>
      ) : (
        <div>
          <p>이름: {user.name}</p>
          <p>나이: {user.age}</p>

          <button onClick={() => updateName('김철수')} style={{ marginRight: '8px' }}>
            이름 수정 (Update)
          </button>
          <button onClick={clearProfile} style={{ backgroundColor: 'red', color: 'white' }}>
            개인정보 삭제 (Delete)
          </button>
        </div>
      )}
    </div>
  );
}

 

3. 컴포넌트 외부 사용 (src/utils/userUtil.ts)

import { useUserStore } from '../store/useUserStore';

// 컴포넌트 외부(일반 TS 파일)에서 현재 상태를 읽거나 수정하는 예시
export const logUserInfo = () => {
  const currentUser = useUserStore.getState().user;
  console.log('현재 사용자:', currentUser);
};