使用redux-middleware和redux-thunk的通用API调用



我试图创建一个中间件来照顾我所有的api。

存储配置

在我的商店里,我正在添加apimmiddleware来使用[CALL_API]。与此同时,我还添加了使用extraArgument访问我在调度方法中创建的泛型API的redux-thunk。

export default function configureStore(initialState) {
  const store=createStore(
    rootReducer,
    initialState,
    compose(
      applyMiddleware(apiMiddleware,thunk.withExtraArgument(api))))
  return store
}

减速器

const initialState =  {
  data : []
}

export default function users(state=initialState,action){
  switch(action.type){
    case 'RECEIVE_USER_DATA':
      return Object.assign({},state,{
        data : action.payload
      })
    case 'FAILURE_USER_DATA':
      return state
    default:
      return state;
  }
}

export function fetchUserData(){
  return (dispatch,getState,api) => {
    const url = 'https://jsonplaceholder.typicode.com/users/';
    const method = 'GET'
    const actionTypes = ['REQUEST_USER_DATA','RECEIVE_USER_DATA','FAILURE_USER_DATA']
    api(url,method,actionTypes)
  }
}
中间件API

export default function api(url,method,actions){
  return {
    [CALL_API] : {
      endpoint : url,
      method : method,
      types: actions
    }
  }
}

这是不工作。然而,如果我把中间件代码在我的动作函数下,它工作得很好。

你不需要重新发明轮子。您可以使用redux-auto来完成此操作。

::
// Reducer
export default function (state, payload, stage, result) {
  switch(stage){
    case 'FULFILLED':
    return Object.assign({},state,{ data : result })
      break;
    case 'REJECTED':
      break;
    case 'PENDING':
    default :
      break;
  }
  return user;
}
// Action
export function action (payload){
  return fetch('https://jsonplaceholder.typicode.com/users/',{
      method: 'GET'
    }).then( data => data.json() );
}
工作示例

相关内容

  • 没有找到相关文章

最新更新