Я вижу много вопросов по этому поводу, но ничто из ответов не помогает мне решить эту проблему. Я хотел посмотреть, как работает saga, так как я с ним не работал.
Вот код
export function* fetchItems() {
try {
yield put({ type: ITEMS_FETCH_REQUEST })
const response = yield call(fetch, 'https://jsonplaceholder.typicode.com/users');
const data = response.json();
yield put({ type: ITEMS_FETCH_SUCCESS, payload: { items: data } })
} catch (error) {
yield put({ type: ITEMS_FETCH_FAILURE, payload: { error: error.message }})
}
}
Он вызывает бесконечный цикл, я много чего пробовал, но ничего не помогает.
Что я здесь делаю неправильно?





Я разобрался, для функции генератора watchAsyncSagaFunction нужно создать еще одну константу, отличную от той, которую вы вызываете в начале asyncSagaFunction.
Пример:
export function* asyncSagaFunction() {
try {
yield put({ type: ITEMS_FETCH_REQUEST })
const response = yield call(fetch, 'https://jsonplaceholder.typicode.com/users');
const data = response.json();
yield put({ type: ITEMS_FETCH_SUCCESS, payload: { items: data } })
} catch (error) {
yield put({ type: ITEMS_FETCH_FAILURE, payload: { error: error.message }})
}
}
Есть ITEMS_FETCH_REQUEST, нужно создать еще один, например, ITEMS_FETCH и в компоненте вызвать тот.
export function* watchAsyncSagaFunction() {
yield takeLatest(ITEMS_FETCH, fetchItems)
}
Чтобы повторить и добавить к тому, что он говорит.
Отладка приложения Redux-Saga означает просмотр типов, представленных в коде. Типы не являются кодом-заполнителем. Они занимают место и имеют смысл, и должны рассматриваться и анализироваться как таковые. Редюсеры находятся на том же уровне важности, что и действия/типы действий.
Спасибо вам за публикацию.