闭包封装状态与监听器,结合解构赋值暴露响应式读写接口,实现轻量无依赖的局部响应式状态管理;支持结构化状态、嵌套响应及自定义 ref 语法糖。

可以用闭包封装状态和监听器,再结合解构赋值暴露响应式读写接口,实现轻量、无依赖的局部响应式状态管理。
用闭包隔离状态与副作用
闭包能将 state 和 listeners 私有化,避免外部直接修改,同时让更新逻辑(notify)只在内部触发:
function createState(initialValue) {
let state = initialValue;
const listeners = new Set();
function getState() { return state; }
function setState(next) {
if (next !== state) {
state = next;
listeners.forEach(fn => fn(state));
}
}
function subscribe(fn) {
listeners.add(fn);
return () => listeners.delete(fn);
}
return { getState, setState, subscribe };
}
用解构赋值暴露简洁 API
返回对象支持解构,让使用者按需取用,语义清晰且不污染命名空间:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
const { getState, setState, subscribe } = createState(0);
// 订阅变化
subscribe((val) => console.log('count changed:', val));
setState(1); // → 'count changed: 1'
setState(1); // 无输出(未变化)
支持结构化状态与嵌套响应(进阶)
若状态是对象,可配合 Object.assign 或 structuredClone 实现浅/深响应;但注意:解构本身不触发响应,需确保 setState 接收新引用:
- 用
setState({...state, count: state.count + 1})替代state.count++ - 订阅函数应关注具体字段,或用
useEffect-风格钩子封装(如自定义 hook) - 多个状态可分别创建,也可扩展为
createStore({ count: 0, name: '' })统一管理
搭配解构实现“响应式变量”语法糖
进一步封装,返回可解构的响应式属性对(类似 Vue 的 ref):
function createRef(initialValue) {
const store = createState(initialValue);
return {
get value() { return store.getState(); },
set value(v) { store.setState(v); }
};
}
// 使用
const count = createRef(0);
count.value++; // 自动通知
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










