3.0.0 • Published 6 years ago

redux-request-maker v3.0.0

Weekly downloads
1
License
MIT
Repository
-
Last release
6 years ago

Redux Request Maker

This is a mini abstraction for making network requests with redux. The lib will manage the 4 high level state possibilities of networking requests, including not-asked, loading, success, and failure states.

The request states (this lib calls them status or statuses) idea comes from this blog post.

Installation

We need to install redux-request-maker and lodash as lodash is a peerDependency of redux-request-maker.

npm install --save redux-request-maker lodash

Configure store with redux-request-maker middleware.

// ./store/configure.js
import { createStore, applyMiddleware, compose } from 'redux';
+ import { middleware as reduxRequestMiddleware } from 'redux-request-maker';
import thunkMiddleware from 'redux-thunk';
import createRootReducer from './reducers';

const middleware = [
    thunkMiddleware,
+    reduxRequestMiddleware,
];

const createStoreWithMiddleware = compose(
    applyMiddleware(...middleware)
)(createStore);

function configureStore (initialState = {}) {
    const reducers = createRootReducer(persistCombineReducers);
    const store = createStoreWithMiddleware(reducers, initialState);
    return store;
};

export default configureStore;

Example Usage

createReduxRequest Example

Use createReduxRequest non collective result request.

import { createReduxRequest } from 'redux-request-maker';
import xhr from '../utils/xhr';

const {
    request,
    reducer,
} = createReduxRequest({
    actionTypePrefix: 'fetch-feed',
    callAPI: () => xhr.get('/api/v1/feed'),
});

export const fetchAllTickers = request;
export default reducer;

createReduxCollRequest Example

Use createReduxCollRequest for the collective result request.

import { createReduxCollRequest } from 'redux-request-maker';
import xhr from '../utils/xhr';
import F from 'lodash/fp';

const {
    reducer,
    request,
} = createReduxCollRequest({
    actionTypePrefix: 'fetch-item-detail',
    primaryKeyPath: ['slug'],
    callAPI: async ({ slug }) => {
        return xhr.get(`/api/v1/item/${slug}`);
    },
});

export const fetchTicker = request;
export default reducer;
3.0.0

6 years ago

2.0.0

6 years ago

1.1.1

6 years ago

1.1.0

6 years ago

1.0.2

6 years ago

1.0.1

6 years ago

1.0.0

6 years ago

0.2.1

6 years ago

0.2.0

6 years ago

0.1.1

6 years ago

0.1.0

6 years ago

0.0.5

7 years ago

0.0.4

7 years ago

0.0.3

7 years ago

0.0.2

7 years ago

0.0.1

7 years ago