如何在Redux-Saga中实现回调?
场景是,我要重定向用户或根据成功显示警报,在分派操作后显示错误回调。
下面是使用 完成任务的代码
this.props.actions.login(credentials).then((success)=>redirectToHomePage)
.catch((error)=>alertError);
因为redux-thunk中的调度动作返回了Promise,所以响应起来很容易。
但是现在,我开始沉迷于redux-
saga,试图弄清楚如何获得与上述代码相同的结果。由于Saga在不同的线程上运行,因此无法从上面的查询中获取回调。所以我只想知道你们是如何做到的。还是在使用redux-
saga时处理回调的最佳方法是什么?调度动作如下所示:
this.props.actions.login(凭证);
和传奇
function* login(action) { try {
const state = yield select();
const token = state.authReducer.token;
const response = yield call(API.login,action.params,token);
yield put({type: ACTION_TYPES.LOGIN_SUCCESS, payload:response.data});
yield call(setItem,AUTH_STORAGE_KEY,response.data.api_token);
} catch (error) {
yield put({type: ACTION_TYPES.LOGIN_FAILURE, error})
}
}
传奇监视器
export function* loginMonitor() { yield takeLatest(ACTION_TYPES.LOGIN_REQUEST,login);
}
动作创造者
function login(params) { return {
type: ACTION_TYPES.LOGIN_REQUEST,
params
}
}
回答:
我认为您应该向登录生成器添加重定向和警报。这样,所有逻辑都在传奇中,并且仍然易于测试。所以基本上您的登录传奇看起来像这样:
function* login(action) { try {
const state = yield select();
const token = state.authReducer.token;
const response = yield call(API.login,action.params,token);
yield put({type: ACTION_TYPES.LOGIN_SUCCESS, payload:response.data});
yield call(setItem,AUTH_STORAGE_KEY,response.data.api_token);
yield call(redirectToHomePage); // add this...
} catch (error) {
yield put({type: ACTION_TYPES.LOGIN_FAILURE, error});
yield call(alertError); // and this
}
}
以上是 如何在Redux-Saga中实现回调? 的全部内容, 来源链接: utcz.com/qa/422868.html