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

我应该在Redux中存储promise吗?

柴飞星
2023-03-14

我在一个在线订餐应用程序中使用Redux和React。

当用户从购物篮中删除一个商品时,我需要向服务器发出一个XHR请求,以计算购物篮的新总价。当这个XHR完成时,我更新redux存储并呈现新的价格。我使用Redux thunk来管理这个异步操作。

有一个问题是,用户连续快速地从购物篮中取出两件物品。用户删除第一项,我启动XHR以获得新价格。然后,用户单击一个按钮以删除第二个项目,并启动第二个XHR。

如果第二个XHR在第一个之前完成,用户界面将处于不正确的状态-将显示仅删除第一个项目的购物篮的价格。

为了解决这个问题,我想在用户点击按钮删除第二个项目时取消第一个(正在运行的)XHR。要取消第一个XHR,我需要跟踪promise对象(我使用axios来管理XHR)。

对我来说,将飞行中的XHR存放在redux商店是有意义的。像这样在Redux中存储promise是不好的做法吗?这似乎不太好——Redux应该只存储普通数据。

共有1个答案

满耀
2023-03-14

这包含在Redux常见问题解答中,http://redux.js.org/docs/faq/OrganizingState.html#organizing-state-non-serializable:

强烈建议您只将普通的可序列化对象、数组和原语放入存储区。从技术上讲,可以将不可序列化的项插入到存储中,但这样做可能会破坏存储内容的持久化和再水合能力,并干扰时间旅行调试。

通常,任何像这样的异步行为都是在 Redux 存储的外部处理的,通过promise或中间件,如 redux-thunk、redux-saga 或 redux-observable。有关这些方法之间的一些比较,请参阅最近的文章 Redux 4 Ways 和 3 Common Methods to Side-Effects in Redux。

 类似资料:
  • 问题内容: 这是我从这里看到的代码。我对关键字感到困惑。 对于,我需要? 对于,我需要? 问题答案: 无需在回调中使用return语句。Promise构造函数不期望回调返回任何类型的返回值。 因此,在该回调中使用语句的原因仅是为了控制该函数中的执行流程。 如果您希望回调内部的执行完成而又不执行该回调中的任何其他代码,则可以在此时发出a 。 例如,您可以这样编写代码,而无需声明: 在这种情况下,您使

  • 问题内容: 我正在使用ExpressJS,Mongodb(Mogoose)构建应用程序。应用程序包含访问用户之前必须对其进行身份验证的路由。 目前,我已经编写了一个快速的中间件来做同样的事情。在这里,借助JWT令牌,我正在进行mongodb查询以检查用户是否已通过身份验证。但是感觉这可能会在我的数据库上增加不必要的请求负载。 我应该针对此特定任务集成redis吗? 会改善API性能吗?还是应该继续

  • 数据是非常小的,就像水果的列表,不会经常改变,也只有一个服务将使用这个数据和服务到其他服务,请提到您的方法的优点和缺点。

  • 我正在使用vue.js和vuex开发一个应用程序,它使用JWT令牌对JSON API服务器进行身份验证。所以我想知道存放JWT代币的最佳做法是什么? 如果我将其存储在vuex商店中,则页面刷新后它会丢失,因此用户需要再次登录,这不是很方便。 如果我将其存储在浏览器的本地存储中,它会在下次登录之前被弃用,然后假设身份验证令牌的组件会混淆。我不知道如何处理这个问题。 感谢你对此的暗示。

  • 我了解到,每次部署firebase云功能时,firebase都会自动将一些数据保存在firebase存储中。我很想知道哪些数据被保存,如果删除是安全的,或者任何关于删除什么的建议。 我有一个小项目,200MB的云存储用于用户数据和10个云功能来完成各种任务。10月初,我做了很少的firebase部署操作,现在我看到了900MB的us.artifacts数据。请参阅下面的firebase和googl