call() и put() — это функции-создатели эффектов в redux-saga, которые говорят middleware выполнить конкретные действия.
call() говорит middleware вызвать асинхронную функцию и дождаться её результатаput() говорит middleware задиспатчить экшн в Redux storecall()Функция call() выполняет функцию или promise и останавливает выполнение до его завершения. Синтаксис: первым аргументом передаётся функция, затем — любые параметры, которые нужно в неё передать.
const userData = yield call(api.fetchUser, action.userId)
В этом примере middleware вызывает api.fetchUser с action.userId и присваивает результат переменной userData.
put()Функция put() диспатчит Redux-экшены для обновления состояния store. Она принимает объект экшена как аргумент и отправляет его через стандартный Redux dispatch.
yield put({ type: 'FETCH_USER_SUCCESS', userData })
Это диспатчит в store экшн с полученными данными пользователя.
В типичной саге для получения данных:
call() для выполнения API-запроса и ожидания ответаput() для диспатча экшенов успеха или ошибки в зависимости от результатаfunction* fetchUserSaga(action) {
const userData = yield call(api.fetchUser, action.userId)
yield put({ type: 'FETCH_USER_SUCCESS', userData })
}
Думай о call() как об обработке сайд-эффектов (внешние операции) и о put() как об управлении обновлениями состояния (диспатч в store).
Эффект call() приостанавливает выполнение саги до разрешения вызванной функции или промиса, в то время как put() сразу отправляет экшн без ожидания ответа.
Новый — ещё не проверен сообществом
Вы