我正在使用redux-saga开展项目。 之前我正在使用thunk所以我可以在api请求之后做一些工作,
componentDidMount(){
login().then((success)=>{
redirectToProfilePage();
})
}
因为redux-thunk中的操作返回promise。 但是当我试图在redux-saga中尝试这样做时,我不能使用然后,因为saga没有回复承诺。
所以我使用componentWillReceiveProps来解决这个问题,但我认为这不是一个合适的解决方案。
我应该在saga发生器中做这项工作吗?或者还有其他更好的方法吗?
答案 0 :(得分:2)
为了充分发挥Sagas的潜力,您需要在componentDidMount中调度一个动作。
在该组件的sagas.js文件中,创建一个函数生成器以侦听componentDidMount中的操作:
function* listenForLoginAction(){
yield takeLatest('LOGIN_ACTION', loginSaga)
}
然后您的loginSaga将按照您告诉它的顺序处理异步内容。您的loginSaga看起来像这样:
function* loginSaga(action){
try{
const loginResponse = yield call(loginFunc, varsForloginFunc)
yield put({type: 'LOGIN_SUCCESS', loginResponse})
} catch (error) {
yield put({type: 'LOGIN_FAIL', message: error.message})
}
}
使用yield call
和yield put
结合使用takeLatest
或takeEvery
侦听特定操作,可以编写等待执行的代码,直到该行它已经完成了。
希望有所帮助!!