Требуется цикл при хранении в axios - PullRequest
0 голосов
/ 19 мая 2019

В реактивном собственном приложении, которое использует архитектуру redux-saga плюс axios, я хочу перехватить 401 запрос и отправить действие, которое отправляет меня на экран входа в систему.

Итак, в моем клиенте axios у меня есть:

axiosInstance.interceptors.response.use(
(response) => {
    return response
},
(error) => {

    // token expired
    if (error.response.status === 401) {
        console.log(`401 interceptor error: ${JSON.stringify(error)}`)
        store.dispatch({type: "UNAUTHORIZED_RESPONSE_RECEIVED"})
    }
    return Promise.reject(error)
}
)

Теперь, пока это работает, проблема в том, что у меня есть требуемый цикл:

Require cycle: redux/store.js -> redux/sagas.js -> redux/project/saga.js -> helpers/projectHelper.js -> helpers/client.js -> redux/store.js

Это очевидно, но, поскольку для создания магазина я применяю программу sagaMiddleware, для ее определения я импортирую мои саги, в которые импортирую projectHelper (серию вызовов Axios AJAX API), в которую импортирую клиент, который Для выполнения store.dispatch() необходимо импортировать хранилище, следуя опции № 1 из этой серии опций:

https://daveceddia.com/access-redux-store-outside-react/#option-1-export-the-store

Все работает, но правильное предупреждение меня немного беспокоит.

Require cycles are allowed, but can result in uninitialized values. Consider refactoring to remove the need for a cycle.

Мой вопрос: как я могу найти другие (также творческие) способы достижения того, что мне нужно, а именно:

  1. перехватить 401 (не помещая его в каждое неудачное действие саги)

  2. (необязательно) отправить действие, которое заканчивается ->

  3. отправить меня на экран "Вход в систему"?

...