У меня есть следующий код, который является разумной реализацией Redux длиной менее 20 строк. Я хочу, чтобы state
, beforeSetStateCallbacks
и afterSetStateCallbacks
были инициализированы только один раз при первом импорте модуля. Я действительно хочу, чтобы этот код был максимально коротким и был в одном файле. Есть ли лучший способ сделать это, который не требует загрязнения объекта window
глобальной переменной?
let state
let beforeSetStateCallbacks
let afterSetStateCallbacks
if (!window.REDUCS_INITIALISED) {
window.REDUCS_INITIALISED = 1
state = {}
beforeSetStateCallbacks = []
afterSetStateCallbacks = []
}
export const beforeSetState = (fn) => beforeSetStateCallbacks.push(fn)
export const afterSetState = (fn) => afterSetStateCallbacks.push(fn)
export const setState = async (key, value) => {
for (const fn of beforeSetStateCallbacks) await fn(key, value)
state[key] = value
for (const fn of afterSetStateCallbacks) await fn(key, value)
}
export const getState = (key) => {
return state[key]
}