Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 在redux传奇中的异步函数之后做一些工作_Reactjs_Redux_Redux Saga - Fatal编程技术网

Reactjs 在redux传奇中的异步函数之后做一些工作

Reactjs 在redux传奇中的异步函数之后做一些工作,reactjs,redux,redux-saga,Reactjs,Redux,Redux Saga,我正在和redux saga合作一个项目。 我以前用过thunk,所以我可以在api请求后做一些工作,比如 componentDidMount(){ login().then((success)=>{ redirectToProfilePage(); }) } 因为redux thunk中的行动回报了承诺。 但当我在redux传奇中尝试这样做时,我不能使用然后,因为传奇并没有回报承诺 所以我使用componentWillReceiveProps来解决这个问题,但我认为这不

我正在和redux saga合作一个项目。 我以前用过thunk,所以我可以在api请求后做一些工作,比如

componentDidMount(){
  login().then((success)=>{
    redirectToProfilePage();
  })
}
因为redux thunk中的行动回报了承诺。 但当我在redux传奇中尝试这样做时,我不能使用然后,因为传奇并没有回报承诺

所以我使用componentWillReceiveProps来解决这个问题,但我认为这不是一个合适的解决方案


我应该在saga generator中做这项工作吗?或者还有其他更好的方法吗?

为了充分发挥传奇的潜力,您需要在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
监听特定操作,可以编写等待执行的代码,直到上面的行完成


希望有帮助

为了充分发挥传奇的潜力,您需要在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
监听特定操作,可以编写等待执行的代码,直到上面的行完成


希望有帮助

谢谢你的帮助。但我想这不是我要问的。异步工作完成后,我想在调度操作的组件中做一些工作。@AnandS很抱歉回复得太晚了。。我正在尝试在异步工作完成后设置状态。或者滚动到某个元素。谢谢帮助。但我想这不是我要问的。异步工作完成后,我想在调度操作的组件中做一些工作。@AnandS很抱歉回复得太晚了。。我正在尝试在异步工作完成后设置状态。或者滚动到某个元素。在组件中创建生成器函数并通过调度的操作调用它。在组件中创建生成器函数并通过调度的操作调用它。