Skip to main content

概述

使用 Zustand 进行轻量级状态管理。

Store 结构

store
useGeneratorStore.ts
useThreadStore.ts
useUserStore.ts
useUIStore.ts

Generator Store

interface GeneratorState {
  // 状态
  currentImage: Image | null;
  images: Image[];
  activeSelector: SelectorType | null;
  isProcessing: boolean;

  // Actions
  setCurrentImage: (image: Image) => void;
  addImage: (image: Image) => void;
  openSelector: (type: SelectorType) => void;
  closeSelector: () => void;
  setProcessing: (value: boolean) => void;
}

export const useGeneratorStore = create<GeneratorState>((set) => ({
  currentImage: null,
  images: [],
  activeSelector: null,
  isProcessing: false,

  setCurrentImage: (image) => set({ currentImage: image }),
  addImage: (image) => set((state) => ({ images: [...state.images, image] })),
  openSelector: (type) => set({ activeSelector: type }),
  closeSelector: () => set({ activeSelector: null }),
  setProcessing: (value) => set({ isProcessing: value }),
}));

User Store

interface UserState {
  user: User | null;
  plan: 'free' | 'pro' | 'max';
  credits: number;

  setUser: (user: User) => void;
  updateCredits: (credits: number) => void;
}

使用方式

// 组件中使用
function ImagePanel() {
  const { currentImage, setCurrentImage } = useGeneratorStore();

  return <img src={currentImage?.url} />;
}

最佳实践

  1. 每个功能模块一个 Store
  2. 状态和 Actions 定义在同一个 Store 中
  3. 使用选择器避免不必要的重渲染