【问题标题】:Axios response interceptor with combination with redux reducer与redux reducer结合的axios响应拦截器
【发布时间】: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?

【问题讨论】:

    标签: redux interceptor reducers axios


    【解决方案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;
    
    }
    

    【讨论】:

      猜你喜欢
      • 2018-11-27
      • 2017-09-17
      • 2022-01-25
      • 2020-09-25
      • 2018-09-27
      • 2020-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多