lobehub/zustand

Conventions pour les stores Zustand de LobeHub. Utilisez-le lors de l'édition de src/store, des slices de store, des actions publiques/internes, des actions dispatch, des flattenActions, des mises à jour optimistes, des sélecteurs, des maps ou de la migration des actions de classe.

Qu'est-ce que zustand ?

Ce skill définit les conventions de store Zustand utilisées par LobeHub. Il est particulièrement utile pour les développeurs travaillant sur des projets LobeHub ou suivant une architecture similaire. Le skill guide l'utilisateur dans l'édition du répertoire `src/store`, la gestion des slices de store, la définition d'actions publiques et internes, la création d'actions dispatch (comme `dispatchAction`), l'utilisation de `flattenActions`, l'implémentation de mises à jour optimistes, la création de sélecteurs et de maps, ainsi que la migration d'actions de classe vers le modèle Zustand. Il est conçu pour fonctionner avec des agents IA capables de manipuler des stores Zustand (par exemple, dans Claude Code, Cursor ou Codex) et s'appuie sur la documentation SKILL.md pour fournir des instructions précises et reproductibles sur la structure du store, les conventions de nommage et les bonnes pratiques.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/lobehub/lobehub/tree/main/skills/zustand

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait zustand ?

Conventions pour les stores Zustand de LobeHub. Utilisez-le lors de l'édition de src/store, des slices de store, des actions publiques/internes, des actions dispatch, des flattenActions, des mises à jour optimistes, des sélecteurs, des maps ou de la migration des actions de classe.

Aperçu

Ce skill définit les conventions et bonnes pratiques pour l'utilisation de Zustand au sein de LobeHub. Il couvre la structure des stores, la définition des actions, l'utilisation des sélecteurs et des maps, ainsi que les patrons avancés comme les mises à jour optimistes et la migration depuis des stores basés sur des classes.

Concepts clés

  • Store : Un store Zustand centralisé, généralement situé dans src/store.
  • Slice : Une partie logique du store, séparée pour des préoccupations distinctes.
  • Actions publiques : Actions exposées via le store pour une utilisation externe.
  • Actions internes : Actions privées, non exposées, utilisées en interne dans le slice.
  • Dispatch action : Action qui dispatch une autre action (par exemple, via dispatchAction).
  • flattenActions : Fonction utilitaire pour aplatir les actions imbriquées en une seule structure.
  • Mise à jour optimiste : Patron de mise à jour qui suppose que l'opération réussira, avec un rollback en cas d'échec.
  • Selecteur : Fonction qui extrait une partie de l'état du store.
  • Map : Objet ou structure de données associatif utilisé dans le store.
  • Migration d'actions de classe : Processus de conversion d'actions de classe (par exemple, Redux) en actions Zustand.

Utilisation

  1. Éditer src/store : Suivez les conventions de nommage et de structure pour les stores.
  2. Créer des slices : Divisez le store en slices logiques pour une meilleure maintenabilité.
  3. Définir des actions : Distinguez les actions publiques et internes.
  4. Utiliser dispatchAction : Appliquez le patron dispatch pour orchestrer des actions complexes.
  5. Appliquer flattenActions : Aplatissez les actions pour simplifier la gestion de l'état.
  6. Implémenter des mises à jour optimistes : Gérez les mutations avec rollback automatique.
  7. Créer des sélecteurs : Optimisez les re-rendus avec des sélecteurs mémoïsés.
  8. Utiliser des maps : Organisez les données associatives avec des maps.
  9. Migrer des actions de classe : Remplacez les actions de classe par des fonctions Zustand.

Exemple

// Exemple de slice de store
import { create } from 'zustand';

interface CounterSlice {
  count: number;
  increment: () => void;
  decrement: () => void;
}

const useStore = create<CounterSlice>((set) => ({
  count: 0,
  increment: () => set((state) => ({ count: state.count + 1 })),
  decrement: () => set((state) => ({ count: state.count - 1 })),
}));

Références

Individual skills in this repo

This repo contains 19 individual skills — each has its own dedicated page.

lobehub/add-provider-doc

Add documentation for a new AI provider — usage docs, env vars, Docker config, image resources.

lobehub/add-setting-env

Add server-side environment variables that control default values for user settings.

lobehub/debug

Debug package usage guide. Use when adding debug logging, understanding log namespaces, or implementing debugging features. Triggers on debug logging requests or logging implementation.

lobehub/desktop

Electron desktop development guide — IPC handlers, controllers, preload scripts, window/menu management.

lobehub/drizzle

LobeHub Drizzle ORM schema and query style. Use for pgTable schemas, indexes, joins, inferred types, db.select/db.query, schema fields, foreign keys, junction tables, or postgres query patterns.

lobehub/hotkey

Add or edit LobeHub keyboard shortcuts. Use for HotkeyEnum, HOTKEYS_REGISTRATION, combineKeys, useHotkeyById, tooltip hotkeys, shortcut scope, conflicts, or Cmd/Ctrl key combos.

lobehub/i18n

LobeHub i18n with react-i18next. Use for user-facing strings, locale keys, namespaces, useTranslation, t(), interpolation, zh-CN/en-US previews, hardcoded UI copy, or pnpm i18n.

lobehub/linear

Linear issue management. Use for LOBE-xxx issues, Linear links, PRs referencing Linear, retrieving issues, updating status, completion comments, or sub-issue trees.

lobehub/lobehub

Use for public LobeHub website documentation under docs/**, including self-hosting, deployment, migration, and configuration guides. Excludes product changelogs and source-code API docs.

lobehub/microcopy

UI copy and microcopy guidelines. Use for user-facing copy, buttons, errors, empty states, onboarding, i18n wording, translation, or copy improvements in Chinese or English.

lobehub/modal

LobeHub imperative modal conventions. Use when creating or migrating modals, dialogs, popups, confirm flows, ModalHost wiring, createModal, confirmModal, useModalContext, or base-ui modal APIs.

lobehub/pr

Create a PR for the current branch (targets `canary` by default), including splitting one cross-layer branch into ordered stacked PRs so a lower layer (db / shared package / server TRPC) merges before its callers (desktop / CLI / UI). Use when the user asks to create / submit a PR, or to split a branch because clients call a server contract that isn't on the trunk yet. Triggers on 'pr', 'create pr', 'submit pr', 'open a PR', 'pull request', 'split this PR', 'stacked PR', 'backend should merge first', '提 PR', '提个 PR', '新建 PR', '拆 PR', '后端先合', '分层合并'.

lobehub/project-overview

LobeHub open-source monorepo architecture map. Use when locating code layers, understanding apps/packages/src layout, business stubs, project structure, or onboarding to the repository.

lobehub/react

LobeHub React component conventions. Use when editing TSX UI, choosing base-ui vs @lobehub/ui vs antd, styling with antd-style, routing, desktop variants, layouts, or component state.

lobehub/store-data-structures

LobeHub Zustand store data-shape patterns. Use when designing store state, list/detail splits, normalized maps, reducers, messagesMap, topicsMap, or choosing shared type sources.

lobehub/testing

Vitest testing guide. Use when writing or updating tests, fixing failing tests, improving coverage, debugging test issues, or setting up mocks.

lobehub/typescript

LobeHub TypeScript style and type-safety guide. Use when editing TS/TSX/MTS, fixing types, choosing interface vs type, avoiding any/object, import type, async flow, or ts-expect-error.

lobehub/upstash-workflow

LobeHub Upstash Workflow and QStash guide. Use for async workflows, process/paginate/execute fan-out, serve handlers, context.run/call/sleep, or workflow triggers.

lobehub/version-release

Version release workflow — release process and GitHub Release notes (not docs/changelog pages).

Skills associés