如何链接异步操作redux saga(获取XHR请求)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何链接异步操作redux saga(获取XHR请求)相关的知识,希望对你有一定的参考价值。

是否有一些通常的模式可以同步链接redux-saga异步请求?例如。 1个函数加载用户ID,第二个函数使用该ID调用一些API请求。我将尝试演示(此代码不是解决方案,只是演示)

function* laodUserSaga(action) {
  try {
    const res = yield apiGet('/user')
    const onboardingData = yield res.json()
    yield  put.resolve(loadUserSuccess(camelizeKeys(onboardingData)))
  } catch (error) {
    yield put.resolve(loadUserError(error))
  }
}
function* loadProfileDataByUserID(action) {
  const state = yield select();
  try {
    const res = yield apiGet(`/user/${state.userID}user-profile`)
    const onboardingData = yield res.json()
    yield  put.resolve(loadUserSuccess(camelizeKeys(onboardingData)))
  } catch (error) {
    yield put.resolve(loadUserError(error))
  }
}
function* loadProfileWithDataSaga(aciton){
  yield put(laodUserSaga)
  yield put(loadProfileDataByUserID)
}

function* sagaConnect() {
  yield all([
    takeLatest(LOAD_USER, laodUserSaga),
    takeLatest(LOAD_USER_DATA_BY_PROFILE_ID, loadProfileDataByUserID),
    takeLatest(LOAD_USER_WITH_PROFILE, loadProfileWithDataSaga),
  ])
}

你看,这样的例子在每个图书馆的文档中都非常有用,1个真实世界的例子往往是我在几秒钟内理解的,我是唯一的吗?

答案

你不必使用takeEvery / Latest助手来启动每个传奇。

你可以像其他任何功能一样召唤传奇,例如:

function* loadProfileWithDataSaga() {
  const user = yield call(loadUser)
  const profileData = yield call(loadProfileDataByUserID, user.id)
}

你只需要写loadUserloadProfileDataByUserID sagas,以便他们接收并返回正确的值。如果你想通过调度动作仍然能够在其他场景中调用它们,我会创建另一个只包装loadUser / Profile功能的传奇。

以上是关于如何链接异步操作redux saga(获取XHR请求)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 redux-saga 处理异步 API 调用?

使用 redux-saga 对 redux store 进行异步调用

react / redux / sagas - 如何基于现有商店数据链接动作?

如何使用 Redux-Saga 和 Hooks 调用 API

redux-saga基本用法

Redux-saga