Skip to main content

Zustand Slices (react_ui/src/data/slices/)

Each Zustand store is defined as a slice — a function that returns state + actions for one domain. Slices are composed into full stores in store.ts.

Files

Slice Pattern

Each slice follows this pattern:
Slices are composed in store.ts:

Design Principles

  • One slice per domain — Don’t mix mixer state with transport state. Each slice owns one file and one StateCreator.
  • Actions inside the slice — State actions (setters, computed updates) live in the slice, not in components.
  • Integer rounding for mixersetVolume() and setPan() round to integers. This is critical for echo prevention — float precision diffs would cause infinite commit loops.
  • Partial merge for engine updates — When the engine pushes state via events, use setState((prev) => ({ ...prev, ...partial })) to avoid overwriting fields the engine side doesn’t know about.
  • partialize for persistence — Use the partialize option to exclude transient fields (like initialized) from persistence. Only persist what should survive a reload.