В реактивном собственном приложении, которое использует архитектуру 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.
Мой вопрос: как я могу найти другие (также творческие) способы достижения того, что мне нужно, а именно:
перехватить 401 (не помещая его в каждое неудачное действие саги)
(необязательно) отправить действие, которое заканчивается ->
отправить меня на экран "Вход в систему"?