state management
设计理念
为什么不用 Redux/MobX?
核心实现
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();