Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
A very (read: don't do this) simple implementation of redux
/*
* The reason for this is just a thought exercise
* often people(myself super included) are so confused
* when trying something new, but breaking it down
* to it's simplest existence can be the best way to understand
*/
function createStore(reducer, initState) {
let state = initState;
let subscribers = [];
const getState = () => state;
const dispatch = action => {
state = reducer(state, action);
subscribers.forEach((subscriber) => subscriber());
return action;
}
const subscribe = (listener) => {
subscribers.push(listener);
return () => {
subscribers = subscribers.slice(subscribers.indexOf(listener) + 1, 1);
};
}
return {
dispatch,
subscribe,
getState
}
}
const initState = {
name: "Conor",
redux: "awesome"
};
const myReducer = (state, action) => {
let newState = Object.assign({}, state);
switch (action.type) {
case "CHANGE_NAME":
newState.name = action.name;
break;
case "CHANGE_REDUX_ADJECTIVE":
newState.redux = action.adjective;
break;
default:
//do nothing
}
return newState
};
const store = createStore(myReducer, initState);
console.log(store.getState(), "initial state");
const subscriber = store.subscribe(() => {
console.log("i'll console state changes twice then unsubscribe so you will not be notified of the third dispatch", store.getState());
});
store.dispatch({
type: "CHANGE_NAME",
name: "Conor Hastings"
});
store.dispatch({
type: "CHANGE_REDUX_ADJECTIVE",
adjective: "great"
});
subscriber();
store.dispatch({
type: "CHANGE_NAME",
name: "Conor Cool Guy"
});
console.log("the state changed but since we unsubscribed the listener above was not notified o the final dispatch", store.getState());
@matef

This comment has been minimized.

Copy link

matef commented Apr 13, 2016

+1

@nagyadam2092

This comment has been minimized.

Copy link

nagyadam2092 commented Jul 4, 2017

+10

@leye0

This comment has been minimized.

Copy link

leye0 commented Jul 10, 2018

+100

@dieillusion

This comment has been minimized.

Copy link

dieillusion commented Aug 4, 2018

thx!

@BenMakesGames

This comment has been minimized.

Copy link

BenMakesGames commented Mar 17, 2019

+Math.pow(10, currentYear - 2016);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.