zustand
Installation
SKILL.md
LobeHub Zustand State Management
State Shapes and Types
- Import shared store types from
@lobechat/types, not@lobechat/database. - Keep lightweight list-item types separate from full detail types; list types must not extend heavy detail types.
- Key cached details by id (
xxxDetailMap: Record<string, Detail>); never hold a singlecurrentDetailobject. - Read through
xxxSelectorsaggregates (selectors.ts), not ad-hoc lambdas repeated across components. - Before choosing list/detail shapes or type sources, read Data structures.
State-Only Stores (default for new and migrated stores)
Actions stay out of the Zustand state. Reference: src/store/page.
| File | Owns |
|---|---|
store.ts |
useXStore = createWithEqualityFn<XState>()(devtools(() => initialState), shallow): state only, no methods |
privateAction.ts |
XPrivateAction: replica slices, entity links, and write helpers shared by public actions. Not exported from index.ts |
action.ts |
XActionImpl (the public API) and the singleton xActions = new XActionImpl(setState, getState, new XPrivateAction(…)) |