| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 
 | import {createStore, combineReducers, applyMiddleware} from 'redux'import ReduxThunk from 'redux-thunk'
 import { composeWithDevTools} from 'redux-devtools-extension'
 
 const initialState = {
 count: 0
 }
 
 const userInitialState = {
 username: 'john'
 }
 
 
 
 const ADD = 'ADD'
 function counterReducer(state = initialState, action) {
 console.log(state, action)
 switch (action.type) {
 case ADD:
 return {count: state.count + (action.num || 1) }
 default:
 return state
 }
 }
 const UPDATE_NAME = 'UPDATE_NAME'
 function userReducer(state= userInitialState, action) {
 switch(action.type) {
 case UPDATE_NAME:
 return {...state, username: action.name}
 default:
 return state
 }
 }
 
 const allReducers = combineReducers({
 counter: counterReducer,
 user: userReducer
 })
 
 const store = createStore(allReducers,
 {
 counter: initialState,
 user: userInitialState
 },
 composeWithDevTools(applyMiddleware(ReduxThunk))
 );
 
 
 function add(num) {
 return {
 type: ADD,
 num,
 }
 }
 
 
 function addAsync(num) {
 return (dispatch, getState) => setTimeout(()=>{
 dispatch(add(num))
 }, 1000)
 }
 
 console.log(store.getState())
 store.dispatch({type: ADD})
 console.log(store.getState())
 
 store.subscribe(()=>{
 console.log('changed', store.getState())
 })
 
 store.dispatch(add(3))
 
 store.dispatch(addAsync(5))
 store.dispatch({type: UPDATE_NAME, name: 'Yehya'})
 
 export default store
 
 |