0.0.0
This commit is contained in:
43
miniprogram/utils/store.js
Normal file
43
miniprogram/utils/store.js
Normal file
@@ -0,0 +1,43 @@
|
||||
// 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 };
|
||||
Reference in New Issue
Block a user