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" })