const ADD_COUNT = 'ADD_COUNT'
const MINUS_COUNT = 'MINUS_COUNT'
const CUSTOM_COUNT = 'CUSTOM_COUNT'
const PUSH_TODO = 'PUSH_TODO'
const POP_TODO = 'POP_TODO'
const initCount = { count: 0 }
const initTodo = { list: [] }
const counter = function (state = initCount, action) {
switch (action.type) {
case ADD_COUNT:
return { count: state.count + 1 }
case MINUS_COUNT:
return { count: state.count - 1 }
case CUSTOM_COUNT:
return { count: action.payload.count }
default:
break
}
return state
}
const todos = function (state = initTodo, action) {
switch (action.type) {
case PUSH_TODO:
return { list: state.list.concat(action.payload.todo) }
case POP_TODO:
return { list: state.list.slice(0, state.list.length - 1) }
default:
break
}
return state
}
let addCount = () => {
return { type: ADD_COUNT }
}
let minusCount = () => {
return { type: MINUS_COUNT }
}
let customCount = (count) => {
return { type: CUSTOM_COUNT, payload: { count } }
}
let pushTodo = (todo) => {
return { type: PUSH_TODO, payload: { todo } }
}
let popTodo = () => {
return { type: POP_TODO }
}
const store = createStore(combineReducers({ counter, todos }))
addCount = bindActionCreators(addCount, store.dispatch)
minusCount = bindActionCreators(minusCount, store.dispatch)
customCount = bindActionCreators(customCount, store.dispatch)
pushTodo = bindActionCreators(pushTodo, store.dispatch)
popTodo = bindActionCreators(popTodo, store.dispatch)
store.subscribe(() => console.log(store.getState()))