ES6 Class 本身不提供状态管理能力,但适合封装状态逻辑:通过实例属性存状态、方法更新并通知、支持订阅/继承/Proxy增强,需接入视图层且适用于中大型项目。

ES6 Class 本身不直接提供状态管理能力,但它是非常适合封装和组织状态逻辑的工具。真正起作用的是你用 Class 设计的数据结构、方法职责和响应机制,而不是 class 关键字本身。
用 Class 封装可观察的状态容器
状态管理器的核心是“数据 + 变更通知”。Class 很自然地把这两者绑定在一起:
- 把状态(如对象、数组)作为实例属性保存,比如
this.state = { count: 0, loading: false } - 把更新方法写在类里,比如
increment()、setLoading(bool),内部调用this.state = {...}并触发通知 - 可选添加订阅机制:用
subscribe(callback)注册监听,用this.notify()在状态变更后批量通知
配合 React 的 Class 组件或自定义 Hook 使用
Class 状态管理器不是孤立存在的,它需要接入视图层:
PigX UI Pro 前端开发指南 - Vue 3 + TypeScript + Element Plus。当用户提到 PigX UI、PigX 前端、lgb-mgui 项目、Vue 3 企业级后台开发、Element Plus 后台开发时使用此技能。
- 在 Class 组件中,可在
constructor初始化实例,并在componentDidMount订阅,在componentWillUnmount取消订阅 - 在函数组件中,可用
useEffect完成同样的生命周期绑定;也可封装一个自定义 Hook,内部 new 一个 Class 实例并返回其状态和方法 - 避免直接在 render 中调用
store.getState(),而是通过订阅回调触发setState或useReducer更新局部 UI
支持继承与复用的模块化设计
多个页面或功能模块共用相似状态逻辑时,Class 的继承特性就很有价值:
立即学习“前端免费学习笔记(深入)”;
- 定义基类
BaseStore,统一实现subscribe、unsubscribe、notify和reset - 子类如
UserStore、CartStore继承它,只专注业务字段和操作逻辑,比如fetchUser(id)或addItem(item) - 不同 Store 之间可通过实例方法互相调用(如
cartStore.addItem(product)),无需全局耦合
搭配 Proxy 或事件总线增强响应能力
纯 Class 默认不具备自动响应式,但可以低成本增强:
- 在构造函数中用
new Proxy(this.state, handler)拦截赋值,自动触发notify - 或使用轻量事件总线(如
EventEmitter),让 Store 发布'stateChange'事件,视图组件监听 - 注意不要过度封装:简单项目用
useState + useEffect更直接;Class 管理器更适合中大型、多模块、需复用逻辑的场景

















