UNPKG

react-native-web-headroom

Version:
39 lines (33 loc) 939 B
export default function createBroadcast (initialState) { let listeners = {} let id = 1 let _state = initialState function getState () { return _state } function setState (state) { _state = state const keys = Object.keys(listeners) let i = 0 const len = keys.length for (; i < len; i++) { // if a listener gets unsubscribed during setState we just skip it if (listeners[keys[i]]) listeners[keys[i]](state) } } // subscribe to changes and return the subscriptionId function subscribe (listener) { if (typeof listener !== 'function') { throw new Error('listener must be a function.') } const currentId = id listeners[currentId] = listener id += 1 return currentId } // remove subscription by removing the listener function function unsubscribe (id) { listeners[id] = undefined } return { getState, setState, subscribe, unsubscribe } }