如何链接异步操作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)
}
你只需要写loadUser
和loadProfileDataByUserID
sagas,以便他们接收并返回正确的值。如果你想通过调度动作仍然能够在其他场景中调用它们,我会创建另一个只包装loadUser / Profile功能的传奇。
以上是关于如何链接异步操作redux saga(获取XHR请求)的主要内容,如果未能解决你的问题,请参考以下文章
使用 redux-saga 对 redux store 进行异步调用
react / redux / sagas - 如何基于现有商店数据链接动作?