推荐用字符串模块名或模块实例作map的key来隔离各模块状态,封装modulestate类提供get/set/reset等方法,并在模块卸载时清理状态,必要时支持事件通知实现跨模块联动。

用 Map 保存不同模块的独立运行状态上下文,核心是把“模块标识”作为键(key),把该模块的状态对象作为值(value)。这样每个模块的状态彼此隔离,互不干扰,且支持动态增删、按需获取。
用模块名或实例作为 Map 的 key
推荐用字符串模块名(如 "userProfile")或模块实例(如某个类的实例引用)作 key。字符串更轻量、易调试;实例作 key 更适合单例模块或需要强绑定场景。
- 字符串 key:适合配置驱动、路由级模块,例如
stateMap.set("payment", { loading: false, error: null }) - 实例 key:适合多个同类模块并存(如多个
FormController实例),stateMap.set(form1, { dirty: true })可确保每个表单状态独立
封装一个模块状态管理器
避免直接操作裸 Map,封装成工具类,提供 get、set、clearFor 等语义化方法:
class ModuleState {
constructor() {
this.map = new Map();
}
get(moduleId) {
return this.map.get(moduleId) ?? {};
}
set(moduleId, state) {
const current = this.map.get(moduleId) || {};
this.map.set(moduleId, { ...current, ...state });
}
reset(moduleId) {
this.map.set(moduleId, {});
}
}
使用时:const states = new ModuleState(); states.set("chat", { unreadCount: 5 });
配合模块生命周期自动清理
模块卸载(如组件销毁、页面跳转)时及时清除对应状态,防止内存泄漏:
- 在 React 中,可在
useEffect清理函数里调用stateMap.delete(moduleId) - 在类模块中,暴露
destroy()方法,内部执行清理 - 也可用
WeakMap替代Map(当 key 是对象且希望随对象回收时),但注意 WeakMap 不支持遍历和字符串 key
扩展:支持嵌套状态与响应式同步(可选)
如果需要监听状态变化(比如模块 A 修改状态后通知模块 B),可在 set 方法中触发事件或集成简易 observable:
set(moduleId, state) {
const prev = this.get(moduleId);
const next = { ...prev, ...state };
this.map.set(moduleId, next);
this.emit("update", { moduleId, prev, next });
}
再配合 addEventListener 或订阅机制,实现跨模块状态联动,又不破坏隔离性。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











