Skip to content

Instantly share code, notes, and snippets.

@kostasx
Forked from bloodyowl/redux-light-example.js
Created January 11, 2023 08:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kostasx/166888f629def9b80f208f9efe558a80 to your computer and use it in GitHub Desktop.
Save kostasx/166888f629def9b80f208f9efe558a80 to your computer and use it in GitHub Desktop.
redux in 14 lines of code
const store = createStore((state = { counter: 0 }, action) => {
switch(action.type) {
case "INCREMENT":
return { counter: state.counter + 1 }
case "DECREMENT":
return { counter: state.counter - 1 }
default:
return state
}
})
store.dispatch({ type: "INCREMENT" })
store.dispatch({ type: "INCREMENT" })
console.log(store.getState())
const createStore = (reducer, state = reducer(undefined, { type: "@@INIT" })) => {
const subscribers = new Set()
return {
dispatch: (action) => {
state = reducer(state, action)
subscribers.forEach(func => func())
},
subscribe: (func) => {
subscribers.add(func)
return () => subscribers.delete(func)
},
getState: () => state
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment