Как отправить действие redux внутри перехватчика выборки? - PullRequest
0 голосов
/ 05 мая 2020

Привет, у меня есть перехватчик выборки, чтобы поймать некоторые общие ответы, такие как 401 et c ... Когда статус ответа равен 401. Мне нужно отправить действие выхода из системы внутри самого перехватчика. Но я не могу этого сделать. Действие отправки не работает. Здесь я делюсь кодом того, что я сделал. Пожалуйста, помогите мне это исправить.

import fetchIntercept from 'fetch-intercept';
import { pushToDataLayer } from './GTMUtility';
import configureStore from '../redux/configureStore';
import { LoggedOut } from "../redux/auth/actions";


const getEndPointFromURL = (url = '') => {
    if (!url) return;
    const urlSegments = url.split('/')
    return urlSegments[urlSegments.length - 1];
}

const store = configureStore();

export const interceptor = fetchIntercept.register({
    request: function (url, config) {
        return [url, config];
    },

    requestError: function (error) {
        // Called when an error occured during another 'request' interceptor call
        return Promise.reject(error);
    },

    response: function (response) {
        if (response.status === 401) {
            store.dispatch(LoggedOut());
            return false
        }
        return response;
    },

    responseError: function (error) {
        // Handle an fetch error
        return Promise.reject(error);
    }
});

Экспортный магазин:

import { createStore, applyMiddleware, compose } from "redux";
import rootReducer from "./rootReducer";
import createSagaMiddleware from "redux-saga";
import { fromJS } from "immutable";

export default function configureStore(initialState = {}) {
  const sagaMiddleware = createSagaMiddleware();
  const middlewares = [sagaMiddleware];

  const composeEnhancers =
    typeof window === "object" && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
      ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({
        // Specify extension’s options like name, actionsBlacklist, actionsCreators, serialize...
      })
      : compose;

  return {
    ...createStore(
      rootReducer,
      composeEnhancers(applyMiddleware(...middlewares))
    ),
    runSaga: sagaMiddleware.run
  };
}

Заранее спасибо.

1 Ответ

0 голосов
/ 06 мая 2020

В вашем файле реестра перехвата вы также должны экспортировать это хранилище, чтобы другие файлы могли его использовать. Если вы также вызываете const store = configureStore() в другом месте, это создает совершенно новый экземпляр store. Тогда store.dispatch, используемый перехватчиком, не повлияет на другой экземпляр хранилища, поэтому ваша проблема.

Я предлагаю вместо экспорта функции configureStore создать хранилище прямо внутри этого файла и экспортировать его.

export const store = configureStore()

Затем в файле перехватчика:

import { store } from '../redux/configureStore';

То же, что и для других файлов, которым требуется хранилище. Не создавайте его снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...