与redux reducer结合的axios响应拦截器
Posted
技术标签:
【中文标题】与redux reducer结合的axios响应拦截器【英文标题】:Axios response interceptor with combination with redux reducer 【发布时间】:2017-05-28 20:49:46 【问题描述】: import React from "react";
import axios from "axios";
import push from "react-router-redux";
import actionTypes from "../Patient/actions";
import put, call from "redux-saga/effects";
import updatePermissionsAction from "../Patient/actions"
// Add a response interceptor for getting permissions
axios.interceptors.response.use(function(response)
console.log("in interceptorXXXXXXXXXXX");
if(response.headers.permissions == null)
return response;
var permissions = response.headers.permissions.split(',');
permissions.forEach((permission, index, permissionArray) =>
permissionArray[index] = permission.trim();
);
put(
type: actionTypes.UPDATE_PERMISSIONS,
permissions: permissions
);
return response;
, function (error)
// Do something with response error
);
正在调用拦截器,但 put 无效。当我的 sagas 调用工作正常的减速器时。
也许拦截器不能使用这种模式?有没有办法从拦截器调用reducer?
【问题讨论】:
【参考方案1】:也许需要使用 applyMiddleware 将 saga 导出并添加到 redux,以便能够使用“put”来调度操作(?)。不完全确定在这种情况下如何实现。
我也遇到了类似的情况,我可以通过导入 store 来调度一个动作,然后使用 store.dispatch(myaction(data));
调用该动作(我没有使用 saga)。
import myAction from 'actionCreators';
import store from 'store';
axios.interceptors.response.use(response =>
if('dataProperty' in response.data)
store.dispatch(myAction(response.data.dataProperty));
return response;
【讨论】:
以上是关于与redux reducer结合的axios响应拦截器的主要内容,如果未能解决你的问题,请参考以下文章
Reducer 在使用 redux-promise 和 axios 时返回 undefined