当前位置: 首页 > 知识库问答 >
问题:

Redux-thunk异步调用和状态

严信瑞
2023-03-14

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

我觉得要么我不明白这个模式,要么这个谜题还有其他部分。

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

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

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

在Redux培训中,当我们执行异步操作时,我们只发送一个操作,该操作将调用异步操作。

因此,在我们定义操作的操作文件中:

// 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状态,并通过props更新回组件。

但是,如何将成功结果反馈给用户呢?是通过道具,和处理组件接收props吗?

这不是太复杂了吗?或者有一种更简单的方法可以为用户提供反馈?

共有3个答案

岳劲
2023-03-14

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

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

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

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

>

  • 发送一个操作,指示查询或Ajax调用已启动。

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

    收到来自 Ajax 的结果后,发送成功或失败的操作。

    这些就是此类行动的例子

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

    在Reducers端,您需要三个部分的have a part of Status来指示Ajax请求正在运行(以显示忙指示器)

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

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

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

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

  • 邹学民
    2023-03-14

    您需要分派一个包含您想要的成功结果的动作,该动作将被一个缩减器使用,该缩减器根据您的成功结果输出一个新的状态。

    function todoApp(state, action) {
    if (typeof state === 'UPDATE_STATUS') {
    return { ...state, action.payload } // You can access this by connecting your components to the global redux store.
    }
    return state
    }
    
    后安民
    2023-03-14

    仅供参考,您不需要在updateAction中返回call ServiceUpdate()。至于提供反馈,您可以让您的组件根据设置的道具渲染某些元素,或者如您所提到的覆盖组件WillReceiveProps/组件DidReceiveProps

    您还可以在< code > shouldcomponentdupdate 中指定组件应该更新的场景,以避免不需要的重新呈现。我不会说这是一个过于复杂的方法。

     类似资料:
    • 我开始学钩子了。但是我不明白异步调用是如何工作的。早些时候我被使用 然后调用我的,但是我应该用useDispat()做什么?如果我只是调用 然后我的< code > foo() don t < code > console . log(2) 我正在使用thunk

    • 问题内容: 据我所知并纠正我是否有错,redux-thunk是一个中间件,可以帮助我们在操作本身中调度异步函数并调试值,而当我使用redux- promise时 ,如果不实现自己的实现就无法创建异步函数作为Action的机制抛出仅分配纯对象的异常。 这两个软件包之间的主要区别是什么?在单个页面react应用程序中使用这两个软件包或坚持redux-thunk就足够了吗? 问题答案: 允许您的动作创建

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

    • 本文向大家介绍redux Redux-thunk:基础知识,包括了redux Redux-thunk:基础知识的使用技巧和注意事项,需要的朋友参考一下 示例 虽然redux本身是完全同步的,但是您可以使用中间件redux-thunk来处理异步操作。 “ thunk”是回调的另一个名称。该函数通常作为参数传递,以便以后调用。 要使用,请将中间件应用于您的redux存储: 这使您可以将thunk传递给

    • 问题内容: 我正在使用React + Flux。我们的团队计划从助焊剂转变为还原剂。Redux对于来自助焊剂世界的我非常困惑。在 磁通控制中, 从 **组件- 操作->存储和存储更新返回组件 很** 简单。它很简单,也很清楚。 但在redux中令人困惑。这里没有商店,是的,有些例子没有使用商店。我经历了一些教程,看来每个人都有自己的实现风格。有些正在使用容器,有些则没有。(我不知道这个Contai

    • 所以我在选择任何一个时都感到困惑。一定很容易理解。