44 lines
1.1 KiB
JavaScript
44 lines
1.1 KiB
JavaScript
// utils/store.js — 轻量全局状态 + 订阅(不引第三方状态库)
|
||
// 读 app.globalData,变更通过 set() 并广播给订阅者。
|
||
|
||
const app = () => getApp();
|
||
const listeners = new Set();
|
||
|
||
function getState() {
|
||
return app().globalData;
|
||
}
|
||
|
||
/**
|
||
* 合并更新全局状态并广播。
|
||
* @param {object} patch 要合并进 globalData 的字段
|
||
*/
|
||
function set(patch) {
|
||
Object.assign(app().globalData, patch);
|
||
listeners.forEach((fn) => fn(app().globalData));
|
||
}
|
||
|
||
/**
|
||
* 订阅状态变更,返回取消订阅函数。
|
||
* @param {(state:object)=>void} fn
|
||
*/
|
||
function subscribe(fn) {
|
||
listeners.add(fn);
|
||
return () => listeners.delete(fn);
|
||
}
|
||
|
||
// ===== 遛狗会话(V1 核心运行时状态,需持久化防丢) =====
|
||
function setWalkSession(session) {
|
||
set({ walkSession: session });
|
||
if (session) {
|
||
wx.setStorageSync('walkSession', session);
|
||
} else {
|
||
wx.removeStorageSync('walkSession');
|
||
}
|
||
}
|
||
|
||
function getWalkSession() {
|
||
return app().globalData.walkSession;
|
||
}
|
||
|
||
module.exports = { getState, set, subscribe, setWalkSession, getWalkSession };
|