Saga вызывается 2 раза при одном диспатче
Происходит все подобным образом:
Есть useEffect, который вызывается при смене параметров url и диспатчит экшен, который пинает сагу. Опытным путём через использование console.log('fhsgdvufsdh') было выявлено, что useEffect работает так, как и должен: вызывается 1 раз при смене урал.
const params = useParams().params;
useEffect(() => {
if (urlTriggers.some(item => item === params)) {
dispatch(setItemsCollection({ itemType: params }));
toggleVisibleMode(true);
} else {
toggleVisibleMode(false);
}
}, [params]);
Сага-наблюдатель, представленная ниже, реагирует на задиспатченный выше экшен.
export function* setItemsCollectionWatcher() {
yield takeEvery(setItemsCollection.TRIGGER, setItemsCollectionWorker);
}
И вызывает вот эту рабочую сагу.
function* setItemsCollectionWorker(action) {
const { itemType } = action.payload;
try {
yield put(toggleIsFetching({ isFetching: true }));
const itemsCollection = yield call(() => {
return axios.get(`http://localhost:60671/api/items/${itemType}/?page=1&count=2`).then(response => response.data.items);
});
yield put(setItemsCollection.success({ itemsCollection }));
yield put(toggleIsFetching({ isFetching: false }));
} catch (error) {
console.log(error);
} finally {
yield put(setItemsCollection.fulfill());
}
}
Есть и такой генератор, который главенствует над всеми сагами-наблюдателями.
export default function* saga() {
yield all([
setBackgroundWatcher(),
setItemsCollectionWatcher(),
])
}
И здесь запускается основная сага.
sagaMiddleware.run(saga);
И вот я не могу понять, почему при 1 вызове useEffect и 1 диспатче я получаю 2 вызова саги и 2 гет-запроса.