state management

Claude Code 使用极简的状态管理方案,仅 30 行代码实现完整的状态管理功能。

设计理念

为什么不用 Redux/MobX?

Claude Code 选择自己实现状态管理,原因:

  1. 极简: 只需要基本的订阅/通知功能

  2. 性能: 避免额外的依赖和运行时开销

  3. 类型安全: 与 TypeScript 深度集成

  4. 不可变: 强制不可变更新

核心实现

AppStateStore

// src/state/store.ts
class AppStateStore {
  private state: DeepImmutable<AppState>;
  private listeners = new Set<Listener>();
  
  getState(): DeepImmutable<AppState> {
    return this.state;
  }
  
  setState(updater: (state: AppState) => AppState): void {
    const newState = updater(this.state as AppState);
    this.state = newState as DeepImmutable<AppState>;
    this.notify();
  }
  
  subscribe(listener: Listener): () => void {
    this.listeners.add(listener);
    return () => this.listeners.delete(listener);
  }
  
  private notify(): void {
    this.listeners.forEach(listener => listener(this.state));
  }
}

export const store = new AppStateStore();

DeepImmutable 类型

确保状态树的每一层都是只读的。

状态结构

AppState 定义

状态更新

不可变更新

辅助函数

React 集成

useStore Hook

使用示例

性能优化

选择器优化

批量更新

持久化

保存状态

恢复状态

状态迁移

版本管理

调试支持

状态快照

时间旅行

最佳实践

1

1. 保持状态扁平

2

2. 使用派生状态

3

3. 避免冗余状态

下一步