useglobals
Version:
基于Jotai二次封装的轻量状态管理工具
88 lines (72 loc) • 2.01 kB
JavaScript
import { useAtom, atom } from 'jotai';
const setStateAotm = (array) => {
try {
const _state = {};
if (Array.isArray(array))
array.forEach((item) => (_state[item.nameSpace] = atom(item.state)));
return _state;
} catch (err) {
console.error(err);
}
};
let states = {};
const initGlobalState = (data) => {
if (data) {
if (Array.isArray(data)) {
states = setStateAotm(data);
} else if (Object.prototype.toString.call(data) === "[object String]") {
if (Array.isArray(require(`${data}`).default))
states = setStateAotm(initData);
}
} else {
const initData = require("/src/models/index").default;
if (Array.isArray(initData)) states = setStateAotm(initData);
}
};
/**
* 全局状态管理
* @param index 索引
* @returns Array
*/
let _setStateData = '';
const useGlobal = (index) => {
if (!Object.keys(states).length) initGlobalState();
if (!states[index]) throw `未找到全局状态"${index}"`;
const [state, setState] = useAtom(states[index]);
try {
if (!states[index]) states[states[index]] = {};
const _setState = (data) => {
try {
if (data) {
if (
Object.prototype.toString.call(JSON.parse(data)) ===
"[object Object]"
) {
setState({
...state,
...JSON.parse(data),
});
} else {
console.warn("Expected object type");
}
}
} catch (error) {
console.error(error);
}
};
const _setData = (data) => {
try {
const strArr = JSON.stringify(data);
if (_setStateData == strArr) return;
_setStateData = strArr;
_setState(strArr);
} catch (error) {
console.error(error);
}
};
return [state, _setData];
} catch (err) {
console.error(err);
}
};
export { initGlobalState, useGlobal };