使用 ...spread,但 redux 仍然会抛出有关状态突变的警告

2023-12-03

Redux 在调度时抛出警告:

Error: A state mutation was detected inside a dispatch, in the path: 
roundHistory.2.tickets. Take a look at the reducer(s) handling the action {"type":"ARCHIVE_TICKETS","roundId":"575acd8373e574282ef18717","data":[{"_id":"575acd9573e574282ef18718","value":7,"user_id":"574c72156f355fc723ecdbbf","round_id":"575acd8373e574282ef18717","__v":0},{"_id":"575acd9573e574282ef18719","value":9,"user_id":"574c72156f355fc723ecdbbf","round_id":"575acd8373e574282ef18717","__v":0},{"_id":"575acd9573e574282ef1871a","value":8,"user_id":"574c72156f355fc723ecdbbf","round_id":"575acd8373e574282ef18717","__v":0},{"_id":"575acdac73e574282ef1871b","value":19,"user_id":"574c72156f355fc723ecdbbf","round_id":"575acd8373e574282ef18717","__v":0},{"_id":"575ad50c4c17851c12a3ec23","value":29,"user_id":"57522f0b1f08fc4257b9cbc6","round_id":"575acd8373e574282ef18717","__v":0},{"_id":"575ad50c4c17851c12a3ec24","value":28,"user_id":"57522f0b1f08fc4257b9cbc6","round_id":"575acd8373e574282ef18717","__v":0},{"_id":"575ad

唯一的减速机处理ARCHIVE_TICKETS行动是这样的:

case 'ARCHIVE_TICKETS' :
  var archive = [...state.roundHistory];
  for (var i in archive) {
    if (archive[i]._id === action.roundId) {
      archive[i].tickets = action.data;
    }
  }
  return Object.assign({}, state, {
    roundHistory: archive
  });

如果我使用 [...spread] 它如何改变状态?


The [...state.roundHistory]这里类似于[].concat(state.roundHistory)。它正在创建一个新数组,但对象in数组共享给state.roundHistory。如果你想改变它们,你需要为每个项目制作副本。

您可以使用以下方法执行此操作Object.assign,类似于您对返回值所做的操作:

var archive = state.roundHistory.map(value => Object.assign({}, value));

或者(正如您在自己的答案中所建议的那样),您可以使用对象扩展表示法返回具有相同对象值的数组:

var archive = state.roundHistory.map(value => ({...value}));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ...spread,但 redux 仍然会抛出有关状态突变的警告 的相关文章

随机推荐

  • 什么线程调用 silverlight WCF 调用上的已完成事件处理程序?

    假设我有 Silverlight 应用程序调用 WCF 服务 void DoStuff MyProxy proxy new MyProxy proxy DoStuffCompleted DoStuffCompleted proxy DoSt
  • 如何在谷歌地图中显示两个地理坐标之间的路线? [复制]

    这个问题在这里已经有答案了 可能的重复 J2ME Android BlackBerry 行车路线 两个位置之间的路线 我只是编写一个应用程序 用于在谷歌地图视图中显示两个坐标 经纬度 之间的路线 显示单个坐标 即使有标记 效果很好 但如何用
  • 从 Windows 服务加载 GUI 应用程序

    我正在编写一个 NET Windows 服务 其作用是启动 GUI 应用程序 其源不可用 该操作是即发即忘 除了初始命令行参数之外没有任何通信 该服务应该作为给定的 Windows 帐户运行 问题 服务启动的应用程序是not显示在桌面上 它
  • HTTP 状态 500 - java.lang.ClassNotFoundException:org.apache.jsp.index_jsp

    我在 Eclipse 中创建了一个 JSP 项目 使用 Tomcat 7 但是当我运行该页面时 我得到一个 ClassnotFoundExcption 在我的项目中 我使用控制器将数据绑定到 JSP 我有一个控制器 一个服务和一个数据对象
  • 致命错误:在非对象上调用成员函数 rowCount()

    我在登录中使用 PDO 按照之前通过 sqli 的指示 并且我已经尝试了以下操作 但是我收到了此致命错误 并且无法弄清楚要提供什么 因此它满足了错误 if query gt rowCount gt 0 session stuff refre
  • 放大二维 UICollectionView

    我创建了一个UICollectionView这是水平和垂直的 它有不同的UICollectionViewCells 一切都布置正确 现在我正在努力做到zoomable The UICollectionViewCells也正确调整了大小 每次
  • 一般解析字符串到日期

    我正在与 Web 服务通信 并且 json 响应中包含日期 问题是这些日期的格式不同 有没有通用的方法来解析这些字符串 您可能应该有一个有序的格式列表来尝试 最好使用乔达时间作为一个比内置 API 好得多的 API 然后依次尝试每个 API
  • Alexa 帐户链接 - “帐户链接凭据无效”

    我正在创建带有帐户链接的 Alexa 技能 我获得了链接授权码并将其兑换为访问令牌 然后 我尝试将所有参数 代码 访问令牌 技能 ID 放入 Alexa Skill Activation API 中 我总是收到一条消息 帐户链接凭据无效 v
  • 更新jar中的.class文件

    我想更新一个 class文件在一个jar与一个新的 最简单的方法是什么 尤其是在 Eclipse IDE 中 本教程详细说明如何更新 jar 文件 jar uf jar file
  • 从 VS2008 升级到 VS2010 后,Web 安装项目删除文件

    我有一个使用 VS2008 构建的 Web 设置项目 我已经将我的解决方案转换为 VS2010 现在当我构建新的安装程序并从 MSI 运行安装时 它安装得很好 然后在最后一步 删除刚刚安装的所有文件 我已将RemovePreviousVer
  • 如何使用inst/extdata中的文件? R 包检查阻止在 R 3.6 中使用 system.file()

    我正在编写 R 包并尝试使用外部文件 我把它放在inst extdata并使用system file extdata file csv package mypackage 在我的函数中加载文件 官方手册只描述了这种获取数据的方式inst e
  • Spring应用程序似乎没有持久化数据

    我正在尝试将一些内容写入我的数据库 但尽管它报告 成功完成请求 但它不起作用 成功后 一切似乎都工作正常 我的控制器正确地重定向了我 Debug DEBUG a d p payment PaymentServiceImpl Requesti
  • 如何让 slickgrid div 根据表格大小调整大小

    我希望我们有一些熟悉 slickGrid 的用户也能看到 StackOverflow 如何使用它 我有一个包含 slickGrid 的 HTML 如下所示 div style width 600px margin 25px 0 0 0 di
  • 领域数据同步不一致

    我遇到一个问题 每次执行相同的查询时 Realm 有时会返回不同的数据 目前我正在使用 SyncAdapter 进行上传 我们的想法是尝试实现离线模式 因此 当用户创建一个项目时 它会被添加到领域数据库中 我通过获取 maxId 并向其添加
  • 实时 Admob 广告突然停止在我的应用中显示

    6 月份 Admob 广告效果非常好 AdMob 向我发送了一封包含验证 PIN 码的信件 以验证我的身份和付款详细信息 七月初左右 几乎所有实时广告都停止在我的应用程序中显示 我仍然发出相同数量的请求 但展示次数太低 我已降至每天 0 0
  • 将 Pandas DataFrame 转换为 JSON

    我将数据存储在 pandas dataframe 中 我想将 tat 转换为 JSON 格式 可以使用以下代码复制示例数据 data Product A B A Zone E A A N E A start 08 00 00 09 00 0
  • 使用 Carthage 构建时如何选择 Swift 工具链

    我正在创建一个 iOS 应用程序并使用 Carthage 来构建外部库 由于我目前使用的库都是 Swift 2 和 Swift 3 所以我有点紧张 因此 我希望拥有一个 Swift 2 分支和一个 Swift 3 分支进行开发 然后在库全部
  • UIPopoverController 太大而 UIPickerView 太小

    我有一个UIPickerView显示在a内UIPopoverController 尺寸UIPickerView are 320x216 由于某种原因 UIPickerView似乎是适当高度的 3 5 并且UIPopoverControlle
  • 如何在 R 中对特定范围内的函数求和?

    这里有三列 indx vehID LocalY 1 2 35 381 2 2 39 381 3 2 43 381 4 2 47 38 5 2 51 381 6 2 55 381 7 2 59 381 8 2 63 379 9 2 67 38
  • 使用 ...spread,但 redux 仍然会抛出有关状态突变的警告

    Redux 在调度时抛出警告 Error A state mutation was detected inside a dispatch in the path roundHistory 2 tickets Take a look at t