Size: a a a

ECMAScript Developers

2020 May 22

АД

Адылбек Джороев... in ECMAScript Developers
Anton Yatchenko
Всем привет, есть проект redux + saga + jwt, раньше никогда не юзал сагу, и логику refresh token реализовывал так, есть instance axios, через axios interceptors проверял время жизни токена при каждом запросе, и делал refresh при необходимости, в случае ошибки обновления вылогинивал юзера через store.dispatch(logoutAction()), но в случае с сагой образуется циклическая зависимость, т.к. axios instance используется в сагах, а сага запускается в файле configureStore. Как можно задиспатчить какой нибудь action в интерсепторе избежав зависимости?
Здарова, а как у тебя сага запускается при диспатче? logoutAction это обычный синхронный экшн?
источник

AY

Anton Yatchenko in ECMAScript Developers
Адылбек Джороев
Здарова, а как у тебя сага запускается при диспатче? logoutAction это обычный синхронный экшн?
logoutAction да, просто ресетит весь стор, при логауте сага не запускается
источник

АД

Адылбек Джороев... in ECMAScript Developers
Anton Yatchenko
logoutAction да, просто ресетит весь стор, при логауте сага не запускается
тогда из-за чего запускается сага? Потому что он в configureStore?
источник

AY

Anton Yatchenko in ECMAScript Developers
Адылбек Джороев
тогда из-за чего запускается сага? Потому что он в configureStore?
источник

АД

Адылбек Джороев... in ECMAScript Developers
аа, понял, но при запуске rootSaga должны заработать лишь вотчеры, воркеры срабатывают только при экшне
источник

АД

Адылбек Джороев... in ECMAScript Developers
То есть вотчеры как бы встают на прослушку экшнов, и код в воркерах только работает, если вотчер уловил ему подходящий экшн
источник

АД

Адылбек Джороев... in ECMAScript Developers
Получается либо ты случайно запускаешь какой-то воркер при запуске саги, либо logoutAction совпадает с каким-то воркером саги
источник

AY

Anton Yatchenko in ECMAScript Developers
Адылбек Джороев
То есть вотчеры как бы встают на прослушку экшнов, и код в воркерах только работает, если вотчер уловил ему подходящий экшн
Да, но тут проблема в импортах, стор -> саги - > апи
- > стор.
источник

AY

Anton Yatchenko in ECMAScript Developers
Т.е в инстансе апи я не могу импортировать store чтобы сделать store.dispatch
источник

АД

Адылбек Джороев... in ECMAScript Developers
не, можно импортировать
источник

АД

Адылбек Джороев... in ECMAScript Developers
он не мешает, дело наверное в каком-то воркере, который запускает axios запрос и круг обратно доходит до интерсептора
источник

AY

Anton Yatchenko in ECMAScript Developers
Адылбек Джороев
не, можно импортировать
При импорте store == undefined
источник

АД

Адылбек Джороев... in ECMAScript Developers
а ты как его экспортируешь?
источник

AY

Anton Yatchenko in ECMAScript Developers
export default store;
источник

AY

Anton Yatchenko in ECMAScript Developers
const store = createStore(rootReducer, persistedState, applyMiddleware(sagaMiddleware))
источник

АД

Адылбек Джороев... in ECMAScript Developers
Anton Yatchenko
const store = createStore(rootReducer, persistedState, applyMiddleware(sagaMiddleware))
ща попробую)
источник

AY

Anton Yatchenko in ECMAScript Developers
Адылбек Джороев
ща попробую)
сага должна вызывать axiosInstance который импортирует store
источник

AY

Anton Yatchenko in ECMAScript Developers
я уже переписал на thunk, но все равно интересно как решаются такие проблемы с помощью саги, гуглы советуют написать свою middleware для стора и контролировать рефреш и логаут в нем, но по мне это не лучшее решение
источник

АД

Адылбек Джороев... in ECMAScript Developers
Anton Yatchenko
я уже переписал на thunk, но все равно интересно как решаются такие проблемы с помощью саги, гуглы советуют написать свою middleware для стора и контролировать рефреш и логаут в нем, но по мне это не лучшее решение
источник

АД

Адылбек Джороев... in ECMAScript Developers
в codesandbox что-то какая-то хрень с загрузкой redux-saga
источник