Skip to content

Instantly share code, notes, and snippets.

Created June 2, 2017 05:23
Show Gist options
  • Save anonymous/7481f327cd3f96db9d258b0b5e95d60d to your computer and use it in GitHub Desktop.
Save anonymous/7481f327cd3f96db9d258b0b5e95d60d to your computer and use it in GitHub Desktop.
NgKLqr
const todo = (state, action) => {
switch (action.type) {
case 'ADD_TODO':
return {
id: action.id,
text: action.text,
completed: false
};
case 'TOGGLE_TODO':
if(state.id !== action.id) {
return state;
}
//...state doesn't work?
return Object.assign({}, state,
{completed: !state.completed}
);
default:
return state;
}
}
const todos = (state=[], action) => {
switch (action.type) {
case 'ADD_TODO':
return [
...state,
todo(undefined, action)
];
case 'TOGGLE_TODO':
return state.map(t => todo(t, action));
default:
return state;
}
};
const visibilityFilter = (
state = "SHOW_ALL", action) => {
switch (action.type) {
case 'SET_VISIBILITY_FILTER':
return action.filter;
default:
return state;
}
};
// const todoApp = (state = {}, action) => {
// return {
// todos: todos(
// state.todos,
// action),
// visibilityFilter: visibilityFilter(
// state.visibilityFilter,
// action
// )
// };
// };
const combineReducers = (reducers) => {
return (state={}, action) => {
return Object.keys(reducers).reduce(
(nextState,key) => {
nextState[key] = reducers[key](
state[key],
action
);
return nextState;
},
{}
);
};
};
const todoApp = combineReducers({
todos,
visibilityFilter
});
const {createStore} = Redux;
const store = createStore(todoApp);
console.log('Initial state:');
console.log(store.getState());
console.log('--------------');
console.log('Dispatching ADD_TODO.');
store.dispatch({
type: 'ADD_TODO',
id: 0,
text: 'Learn Redux'
});
console.log('Current state:');
console.log(store.getState());
console.log('--------------');
console.log('Initial state:');
console.log(store.getState());
console.log('--------------');
console.log('Dispatching TOGGLE_TODO.');
store.dispatch({
type: 'TOGGLE_TODO',
id: 1,
text: 'Go Shopping'
});
console.log('Current state:');
console.log(store.getState());
console.log('--------------');
console.log('Initial state:');
console.log(store.getState());
console.log('--------------');
console.log('Dispatching SET_VISIBILITY_FILTER.');
store.dispatch({
type: 'SET_VISIBILITY_FILTER',
filter: 'SHOW_COMPLETED'
});
console.log('Current state:');
console.log(store.getState());
console.log('--------------');
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.2/react.min.js"></script>
<script src="https://wzrd.in/standalone/expect@latest"></script>
<script src="https://wzrd.in/standalone/deep-freeze@lates"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/redux/3.0.4/redux.js"></script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment