This project created using Create React App.
yarn add reduxyarn add react-reduxyarn add redux-thunkyarn add redux-promise-middleware
3 and 4 are for async action.
- Add Action.
- Add Reducer.
- Add Store.
Note : Source file contains example/demo.
const store = createStore(rootReducer,
window.devToolsExtension ? window.devToolsExtension() : f => f);const enhancers = [applyMiddleware(thunk, promiseMiddleware())];
if (window['__REDUX_DEVTOOLS_EXTENSION__']){
enhancers.push(window['__REDUX_DEVTOOLS_EXTENSION__']());
}
const store = createStore(rootReducer, compose(...enhancers));import { createAction } from 'redux-actions';
import { FULFILLED, PENDING, REJECTED } from 'redux-promise-middleware';
import { getUsers } from '../services/users';// Action Constants
export const FETCH_USER = 'FETCH_USER';// Async Action Creators
export const FETCH*USER_PENDING = `\${FETCH_USER}*\${PENDING}`;
export const FETCH*USER_REJECTED = `\${FETCH_USER}*\${REJECTED}`;
export const FETCH*USER_FULFILLED = `\${FETCH_USER}*\${FULFILLED}`;
export const fetchUsers = createAction(FETCH_USER, getUsers);import { FETCH_USER_PENDING, FETCH_USER_FULFILLED } from '../action/users';
const INITIAL_STATE = { list: [], isLoading: false };
export default function(state = INITIAL_STATE, action) {
switch (action.type) {
case FETCH_USER_PENDING:
return { ...state, isLoading: true };
case FETCH_USER_FULFILLED:
return { ...state, list: action.payload, isLoading: false };
default: return state;
}
}