状态管理真正困难的部分,通常不是选择哪一个库,而是回答三个问题:
- 这份状态属于谁?
- 谁可以更新它?
- 哪些值其实可以被计算出来?
从状态归属开始
如果一份数据只影响单个组件,就让它留在组件内部。只有当多个相距较远的消费者需要共享同一事实来源时,才值得提升状态。
type CartItem = {
id: string;
quantity: number;
};
const totalItems = (items: CartItem[]) =>
items.reduce((total, item) => total + item.quantity, 0);
totalItems 是派生值,不应被存储成第二份状态。减少重复事实来源,通常比更换状态库更能降低复杂度。
先设计状态边界,再选择工具。工具应该服务于边界,而不是定义边界。
保持更新路径单一
允许任意模块直接修改共享状态,会让排查成本快速上升。集中更新入口,并让每次更新表达明确意图,可以让日志、测试与回滚都更可靠。
结语
可维护的状态管理不是把所有数据放进一个容器,而是让每份数据待在最小、最清楚的位置。