Бесконечный цикл в Redux Saga

Я вижу много вопросов по этому поводу, но ничто из ответов не помогает мне решить эту проблему. Я хотел посмотреть, как работает 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 }})
  }
}

Он вызывает бесконечный цикл, я много чего пробовал, но ничего не помогает.

Что я здесь делаю неправильно?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
0
2 380
2

Ответы 2

Я разобрался, для функции генератора 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 означает просмотр типов, представленных в коде. Типы не являются кодом-заполнителем. Они занимают место и имеют смысл, и должны рассматриваться и анализироваться как таковые. Редюсеры находятся на том же уровне важности, что и действия/типы действий.

Спасибо вам за публикацию.

Другие вопросы по теме