Redux-thunk 异步调用和状态

加桑·卡维詹

我想知道我是否正确理解了 React 或 React-Native 中 Redux-thunk 异步操作的模式,以及我们如何对操作状态进行用户反馈。

我觉得要么我不理解模式,要么还有其他拼图。

所以,在我的 React 原生应用程序中(但它也可以用于 React),我想调用一个更新 REST 调用,它将返回一个承诺。如果成功或失败,我想相应地向用户显示一条消息。

没有 Redux-async,我只是调用其余的,并处理 promise。

callServiceUpdate(data).then(() => displaySuccessMessage())
.catch(() => displayErrorMessage());

在 Redux 训练中,当我们做 async 时,我们只是 dispatch 一个 action,这个 action 会调用异步操作。

所以,在我们定义动作的动作文件中:

// in file databaseActions.js

export function updateStatusAction(isSuccess, errorMessage) {
return {
    type: 'UPDATE_STATUS',
    isSuccess,
    errorMessage };
}

export function UpdateAction(data) {
   return (dispatch) => {
     callServiceUpdate(data)
         .then(() => dispatch(updateStatusAction(true)))
         .catch((error) => dispatch(updateStatusAction(false, error)));
}};

并且分派动作将调用服务。

然后我们调度 updateStatusAction,它将更新 redux state,并通过 props 更新组件。

那么如何将成功的结果返回给用户呢?是通过 props 和处理 componentWillReceiveProps 吗?

是不是太复杂了?或者有更简单的方法来为用户提供反馈?

加桑·卡维詹

在我对这个主题做了一些研究之后,并搜索了人们是如何解决这个问题的。

我发现处理 Ajax 的常用模式是我在问题中提到的。但是,用户对ajax调用状态的反馈只发生在UI中的一个地方,在根组件容器中,或者在包含所有进行ajax调用的子组件的任何父组件容器中。

如果您需要阅读有关如何设计 UI 以适应良好的 React UI 设计良好实践的更多信息,请阅读代表性组件和容器组件

React + Redux 中处理 Ajax 调用的常用模式如下:

  1. 发送指示查询或 Ajax 调用已启动的操作。

  2. 发送将启动 Ajax 调用的操作。

  3. 收到来自 Ajax 的结果后,发送一个 Action for SUCCESS 或 FAILURE。

这些是此类行动的例子

{ type: 'FETCH_POSTS_REQUEST' }
{ type: 'FETCH_POSTS_FAILURE', error: 'Oops' }
{ type: 'FETCH_POSTS_SUCCESS', response: { ... } }

在 Reducers 方面,您需要有一个 Status 的三个部分来指示 Ajax 请求正在运行(以显示忙碌指示器)

商店中的状态看起来与此类似

frontend: {
      isFetching: true,
      didInvalidate: false,
      items: []
    },

然后在根容器中,处理 isFetching 以呈现繁忙的指示器。

并处理项目以显示结果,或显示错误

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Redux Thunk链接动态系列的异步操作?

使用redux-thunk和redux-observable

如何使用Redux 4.0.1,Redux-Thunk 2.3.0和Typescript 3.1.3正确键入Redux-thunk操作和mapDispatchToProps

Redux thunk:等待异步函数分派

如何添加`redux-thunk`和`redux-promise`?

Redux Thunk getState()返回所有状态

Redux和Redux thunk不同步

使用Redux Thunk在React Redux应用程序中保持异步调用的DRY

redux thunk中的getState()是否会更改实际状态

Redux-Logic和Redux-thunk之间的区别

如何在带有thunk的react-redux挂钩中进行异步调用?

当使用redux-thunk的异步api调用导致redux道具更改时,不会触发UseEffect

Redux Thunk和异步操作

React / TypeScript / Redux / Thunk操作未调度,状态未更新

什么时候使用redux saga和redux thunk?

如何通过redux-thunk中的fetching操作访问状态?

Redux Thunk Action Creator没有被调用

Redux Thunk-异步,与Promises链接的动作

在Redux中使用多个异步调用设置初始状态

使用 react native 和 redux 进行异步调用,thunk

Redux Thunk 共享异步对象

如何使用 Jest Mock 模块测试 Redux Thunk 异步操作

异步 redux thunk 需要 wrapoer 功能

Await 只允许在异步函数中使用 - webpack、redux thunk

Redux 工具包从 thunk 访问状态

Redux 和 Redux-thunk

Redux Thunk : redux thunk 不分派动作

使用 redux thunk 进行异步 api 获取

如何使用 Redux Thunk 和 Redux Toolkit 进行发布请求