使用 redux-thunk 时候由于一个请求需要写三个 action, 比较麻烦. redux-promise-middleware 可以在根据 type 自动生成对应的 action, 一个例子如下
action 只需写一个基本的, 对应会生成: FETCH_DATA_PENDING, FETCH_DATA_SUCCESS, FETCH_DATA_REJECTED 三种形式
// action
export const getData = () => {
return {
type: 'FETCH_DATA',
// payload 返回了一个 promise
payload: axios.get('https://test.api')
}
}
// 三个 action 会自动生成, 只需在 reducer 里处理好即可reducer 里代码可能为:
const initialState = {
isLoading: false,
error: null,
data: ''
}
const reducer = (state=initialState, action={}) => {
switch(action.type) {
case 'FETCH_DATA_FULFILLED':
return {
isLoading: false,
error: null,
data: action.payload.data.xxx
}
case 'FETCH_DATA_PENDING':
return {
isLoading: true,
error: null,
data: ''
}
case 'FETCH_DATA_REJECTED':
return {
isLoading: false,
error: action.payload.message,
data: ''
}
default:
return state
}
}