@ytkj/redux-axios-middleware
v0.1.3
Published
redux middleware with axios ajax calling, powered by TypeScript.
Downloads
3
Readme
Redux Axios Middleware
This repository is related to npm package @ytkj/redux-axios-middleware.
Installation
npm install -S @ytkj/redux-axios-middleware
Usage
- Create your
store
applyingraMiddleware
withthunkMiddleware
.import { createStore, applyMiddleware } from 'redux'; import thunkMiddleware from 'redux-thunk'; import { AxiosError } from 'axios'; import { raAction, createRAMiddleware, RAAction } from '@ytkj/redux-axios-middleware'; const raMiddleware = createRAMiddleware({ actionBeforeFetch: { type: 'FOO_ACTION'}, actionAfterFetch: { type: 'BAR_ACTION'}, actionCreatorOnFail: (e: AxiosError) => ({type: 'ERROR', payload: e.response.data}), }); store = createStore(reducer, applyMiddleware(thunkMiddleware, raMiddleware));
- dispatch
raAction
from inside yourThunkAction
.import { ThunkAction, ThunkDispatch } from 'redux-thunk'; const FETCH_MESSAGE: 'FETCH_MESSAGE' = 'FETCH_MESSAGE'; interface FetchMessage extends Action<typeof FETCH_MESSAGE> { payload: string; } function fetchMessage( url: string ): ThunkAction<Promise<RAAction>, State, void, RAAction|FetchMessage> { let thunkAction = async( dispatch: ThunkDispatch<State, void, RAAction|FetchMessage>, getState: () => State ): Promise<RAAction> => { return dispatch(raAction({ url: url, method: 'GET', successActionType: FETCH_MESSAGE, })); } return thunkAction; } store.dispatch(fetchMessage('/api/hello/world'));
API
createRAMiddleware()
middleware
factory function.
arguments
|type|description|
|---|---|
|CreateRAMiddlewareOption
|1st argument
return
|type|description|
|---|---|
|RAMiddleware
|created raMiddleware|
CreateRAMiddlewareOption
|property|type|description|
|---|---|---|
|actionBeforeFetch?
|Action\|Action[]
|action
that should be dispatched before sending Ajax request.|
|actionAfterFetch?
|Action\|Action[]
|action
that should be dispatched after receiving Ajax response, whether success or fail.|
|actionCreatorOnFail?
|(e: AxiosError) => Action \| Array<(e: AxiosError) => Action>
|function that shold be called after receiving failure response. AxiosError
object will be passed to this function.|
|axiosClient?
|AxiosInstance
|axios
instance that shold be used to call Ajax request; default to axios
global object.|
raAction()
action creator
for RAAction
.
argument
|type|description|
|---|---|
|RAActionPayload
|1st argument.|
return
|type|description|
|---|---|
|RAAction
|dispatched and will trigger some events in raMiddleware
|
RAActionPayload
|property|type|description|
|---|---|---|
|url
|string
|request URL.|
|method
|'GET'\|'POST'\|'PUT'
|requst HTTP method.|
|successActionType
|any
|action.type
string.|
|requestBody?
|any
|request body (only for 'POST'
and 'PUT'
).|
|requestConfig?
|AxiosRequestConfig
|request config for axios
.|
|successChainAction?
|Action\|TunkAction\|Action[]\|ThunkAction[]
|action
that shold be dispatced after receiving Ajax response only if succeed.|
|successChainActionCreator?
|ActionCreator<Action\|ThunkAction> \| Array<ActionCreator<Action>\|ActionCreator<TunkAction>>
|action creator
that shold be dispatched after receiving Ajax response only if succeed. response content(res.data
) will be passed as argument.|