gpt4 book ai didi

reactjs - Redux-Saga中如何实现回调?

转载 作者:行者123 更新时间:2023-12-03 13:08:31 38 4
gpt4 key购买 nike

场景是,我想在分派(dispatch)操作后根据成功、错误回调重定向用户或显示警报。

下面是使用 redux-thunk 执行任务的代码

this.props.actions.login(credentials)
.then((success)=>redirectToHomePage)
.catch((error)=>alertError);

因为 redux-thunk 中的调度操作返回一个 Promise,所以很容易根据响应进行操作。

但是现在我正在着手研究 redux-saga,并试图找出如何实现与上述代码相同的结果。由于 Saga 在不同的线程上运行,因此我无法从上面的查询中获取回调。所以我只是想知道你们是怎么做到的。或者使用 redux-saga 时处理回调的最佳方法是什么?调度操作如下所示:

this.props.actions.login(credentials);

和传奇

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);
}

Action 创建者

function login(params) {
return {
type: ACTION_TYPES.LOGIN_REQUEST,
params
}
}

最佳答案

我花了一整天的时间研究这些东西,从 thunk 切换到 redux-saga

我也有很多类似这样的代码

this.props.actions.login(credentials)
.then((success)=>redirectToHomePage)
.catch((error)=>alertError);

可以使用 thunk + saga

function login(params) {
return (dispatch) => {
return new Promise((resolve, reject) => {
dispatch({
type: ACTION_TYPES.LOGIN_REQUEST,
params,
resolve,
reject
})
}
}
}

然后在传奇之地你可以做类似的事情

function* login(action) {
let response = yourApi.request('http://www.urthing.com/login')
if (response.success) {
action.resolve(response.success) // or whatever
} else { action.reject() }
}

关于reactjs - Redux-Saga中如何实现回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41076600/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com