Skip to content

Instantly share code, notes, and snippets.

@krutoo
Last active October 23, 2020 11:16
Show Gist options
  • Save krutoo/c66cfc9bc7def58c76d91f98c7a1f6f9 to your computer and use it in GitHub Desktop.
Save krutoo/c66cfc9bc7def58c76d91f98c7a1f6f9 to your computer and use it in GitHub Desktop.
minimal version of redux createStore
export const createStore = (reducer, preloadedState, enhancer) => {
if (enhancer) return enhancer(createStore)(reducer, preloadedState);
const listeners = new Set();
let state = reducer(preloadedState, { type: `INIT:${performance.now()}` });
return {
dispatch: action => void (state = reducer(state, action), listeners.forEach(fn => fn())),
subscribe: listener => (listeners.add(listener), () => listeners.delete(listener)),
getState: () => state,
};
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment