d3.hasChanged

Modifying particles with Redux

by IPWright83

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/redux/3.7.2/redux.js"></script>
<svg width="960" height="500"></svg>

JavaScript

const initState = {};


const reducer1 = (state = {}, action) => {
   switch(action.type) {
      case "INIT": {
	  	const count = 0;
	  	return { ...state, count };
	  }
	  
   	  case "ADD": {
	  	count = state.count + 1;
		return { ...state, count };
	  }
	  default:
         return state;
   }
};

const reducer2 = (state = {}, action) => {
	switch(action.type) {
	  case "INIT": {
	  	const count = 0;
	  	return { ...state, count };
	  }
	  
	  case "ADD": {
	  	count = state.count + 10;
		return { ...state, count };
	  }
	  default:
         return state;
	}
}

let f = null;

const eventReducer = (state = {}, action) => {
	if (f) {
		setTimeout(() => { f(action.type); }, 0);
	}
	
	console.log("EVENT", action.type, state, action.fullState);
	return state;
}

combineReducers = (reducers) => {
	return (state = {}, action) => {
		action = { ...action, fullState: state };
		
		const rootReducer = Object
			.keys(reducers)
			.reduce((result, key) => {
				result[key] = reducers[key](state[key], action);
				return result;
			}, {});
			
		console.log("reducer", rootReducer);
		return rootReducer;
	}
}

const reducers = combineReducers({ reducer1, reducer2, eventReducer })
const store = Redux.createStore(reducers);

f = (action) => {
	console.log(action, store.getState());
}
	
store.dispatch({ type: "INIT" })
store.dispatch({ type: "ADD" })