我以前对状态管理的理解,是“给数据建一个容器”。后来发现问题不是容器少,而是业务逻辑被拆碎了:状态、逻辑、依赖各自为战,结果变成了“可运行但难维护”。
easy-model 的价值,在于把状态管理变成“业务建模”。模型是核心,状态附着在模型上,依赖靠注入,变化靠监听。下面是我理解的 5 个关键能力:
- 类模型驱动:字段即状态,方法即业务逻辑,摆脱 action/reducer 的碎片化。
- 实例按参数缓存:
provide让相同参数返回同一实例,天然支持按业务 key 分区。 - 深度变化监听:不仅能监听字段,还能追踪嵌套对象、引用实例、派生 getter 的变化。
- Hooks 友好:
useModel/useInstance/useWatcher不改变 React 的使用习惯。 - IoC + DI 内建:依赖关系显式,测试和重构成本更低。
跨组件共享实例的写法如下,这个模式在大型页面非常常见:
import { provide, useModel, useInstance } from "easy-model";
class CommunicateModel {
constructor(public name: string) {}
value = 0;
random() {
this.value = Math.random();
}
}
const CommunicateProvider = provide(CommunicateModel);
function CommunicateA() {
const { value, random } = useModel(CommunicateModel, ["channel"]);
return (
<div>
<span>组件 A:{value}</span>
<button onClick={random}>改变数值</button>
</div>
);
}
function CommunicateB() {
const { value } = useModel(CommunicateModel, ["channel"]);
return <div>组件 B:{value}</div>;
}
如果你已经感受到“状态容器式”的心智负担,那么 easy-model 值得认真评估。它不是换一个库,而是换一种思路:让业务模型成为状态的第一公民。
GitHub: easy-model
npm: @e7w/easy-model