UNPKG

useglobals

Version:

基于Jotai二次封装的轻量状态管理工具

88 lines (72 loc) 2.01 kB
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 };