当前位置: 首页 > 面试题库 >

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

云炜
2023-03-14
问题内容

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

下面是使用 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(凭证);

和传奇

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 是一个用于管理 Redux 应用异步操作(Side Effects。译注:直译成 “副作用” 不太通顺,所以这里译为 “异步操作” 更好理解)的中间件(又称异步 action)。

  • 问题内容: 以下两种方法有什么区别? 什么时候需要使用fork,什么时候不需要? 问题答案: 通常,当传奇需要启动非阻塞任务时很有用。这里的非阻塞意味着:调用方启动任务并继续执行,而无需等待任务完成。 在许多情况下这可能有用,但主要有2种情况: 按逻辑域对Sagas进行分组 保留对任务的引用,以便能够取消/加入该任务 您的顶级传奇故事可能是第一个用例的示例。您可能会遇到类似: 其中可能包括了诸如:

  • This project was bootstrapped with Create React App. This is an advanced Boilerplate Project using: Redux Axios Reselect Immutable Recompose Redux-Saga React-Router React-Router-Redux Getting Started

  • 问题内容: 回调如何用PHP编写? 问题答案: 该手册可互换地使用术语“回调”和“可调用”,但是,“回调”传统上是指充当函数指针的字符串或数组值,并引用函数或类方法以供将来调用。自PHP 4以来,已经允许使用函数式编程的某些元素。 通常,这是使用可调用值的安全方法: 现代PHP版本允许上面的前三种格式直接作为调用。并支持以上所有内容。 注释/注意事项: 如果函数/类已命名空间,则字符串必须包含标准

  • Redux Thunk和Redux Saga都是Redux的中间件。两者之间的区别是什么?如何确定何时使用Redux Thunk或Redux Saga?

  • 本文向大家介绍一篇文章介绍redux、react-redux、redux-saga总结,包括了一篇文章介绍redux、react-redux、redux-saga总结的使用技巧和注意事项,需要的朋友参考一下 本篇主要将react全家桶的产品非常精炼的提取了核心内容,精华程度堪比精油。各位大人,既然来了,客官您坐,来人,给客官看茶~~ redux 前言 首先,本篇文章要求您对js,react等知识有