Zustand Store
Créez des stores Zustand en suivant les patterns établis avec les types TypeScript appropriés et les middlewares.
Quick Start
Copiez le modèle depuis assets/template.ts et remplacez les placeholders :
{{StoreName}}→ nom du store en PascalCase (ex.Project){{description}}→ brève description pour JSDoc
Always Use subscribeWithSelector
import { create } from 'zustand';
import { subscribeWithSelector } from 'zustand/middleware';
export const useMyStore = create<MyStore>()(
subscribeWithSelector((set, get) => ({
// state and actions
}))
);
Separate State and Actions
export interface MyState {
items: Item[];
isLoading: boolean;
}
export interface MyActions {
addItem: (item: Item) => void;
loadItems: () => Promise<void>;
}
export type MyStore = MyState & MyActions;
Use Individual Selectors
// Good - only re-renders when `items` changes
const items = useMyStore((state) => state.items);
// Avoid - re-renders on any state change
const { items, isLoading } = useMyStore();
Subscribe Outside React
useMyStore.subscribe(
(state) => state.selectedId,
(selectedId) => console.log('Selected:', selectedId)
);
Integration Steps
- Créez le store dans
src/frontend/src/store/ - Exportez depuis
src/frontend/src/store/index.ts - Ajoutez des tests dans
src/frontend/src/store/*.test.ts