如何检索商店状态的旧值和新值

2024-01-22

在我的组件中,我试图获取在 vuex 存储状态中分配的特定对象数组的旧值和新值,如下所示。但是,当我 newArray 和 oldArray 返回相同的对象数组时。

我从以下文档中了解了以下内容,但我不明白检索不同版本的最佳方法是什么。

注意:当改变(而不是替换)对象或数组时,旧值将与新值相同,因为它们引用相同的对象/数组。 Vue 不会保留变异前值的副本。

这是我现在在组件中尝试执行的操作

export default {
  name: 'O1_OrderBook',
  watch: {
      '$store.state.orderBookSell': {
         deep: true,
         handler (newArray, oldArray) {
           console.log(newArray,oldArray)
         }
       }
    },
}

假设当你在 Javascript 中创建一个数组/对象时,

 var arr = [1,2,3];

这会在浏览器内存中创建一个数组。但什么arr变量包含的不是整个数组值,它包含对浏览器内存中数组的引用。你可以把它想象成arr包含一个地址,可以将您指向浏览器内存中的真实数组值。

如果你这样做

var arr = [1,2,3];
var arr2 = arr;
arr2[0] = 4;
console.log(arr); // you would get [4,2,3];

editing arr2改变了arr也。因为它们都指向浏览器内存中的同一个数组。

这就是“旧值将与新值相同,因为它们引用相同的对象/数组" means.

同样的原理也适用于对象。在 Javascript 中,数组只是一种特殊类型的对象。


要在观察器中检索数组的不同版本,您必须在每次更改数组时克隆它以将其设置为新数组。

例如,

state.orderBookSell = [...state.orderBookSell];

但.....[...array]是浅克隆,不是深克隆。这是一个问题。你有一个对象数组。请记住,对象也有相同的规则。它们通过引用传递。所以你必须进行深度克隆,以便所有对象也被克隆。

using lodash克隆深 https://lodash.com/docs#cloneDeep深度克隆方法

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

如何检索商店状态的旧值和新值 的相关文章

随机推荐

  • MySQL yyyy-mm-ddThh:mm:ss.sssZ 到 yyyy-mm-dd hh:mm:ss [重复]

    这个问题在这里已经有答案了 我想上传包含以下内容的 csv 文件yyyy mm ddThh mm ss sssZ data 当我设置DATETIME输入MySQL 我收到错误代码 1292 MySQL 如何上传yyyy mm ddThh m
  • 字符串如何存储在 VBA 字典结构中?

    因为我目前正在演奏大量的字符串 看看另一个问题 数组和Arraylist的VBA内存大小 https stackoverflow com questions 20526324 vba memory size of arrays and ar
  • “热门”哈希键在 Amazon DynamoDB 上的实践中会如何影响整个过程?

    首先 这是一个支持document http docs aws amazon com amazondynamodb latest developerguide GuidelinesForTables html为 DynamoDB 提供有关如
  • JSON.stringify 与序列化

    Is JSON stringify 相当于序列化或有效序列化 或者它只是实现序列化的必要步骤 序列化 换句话说 就是JSON stringify 对于序列化来说足够但不是必需的 或者是必要但不充分 或者说它对于 JavaScript 对象的
  • 单元测试:初学者问题

    我终于开始进行单元测试了 因为我知道我应该这样做一段时间 但我有几个问题 我应该或不应该重新测试父母 测试孩子们是否在课堂上 没有方法被覆盖 从概念上讲 您如何测试 提交了表格的一部分 我在用着 PHP Edit 我问这个问题的原因是我有一
  • C# 中用于关闭 Windows 窗体窗体的转义按钮

    我已经尝试过以下方法 private void Form1 KeyDown object sender System Windows Forms KeyEventArgs e if Keys e KeyValue Keys Escape t
  • 如何防止 jquery ajax 对数据参数上的某些字符进行编码?

    我正在使用 jquery ajax 从三方 Web 服务查询数据 问题是我需要传递冒号字符 作为数据的一部分 不对其进行编码 但 ajax 方法会自动对所有非字母字符进行编码 所以问题是如何防止 jquery ajax 对数据参数上的某些字
  • Numpy 赋值,如“numpy.take”

    是否可以按照 take 功能的工作方式分配给 numpy 数组 例如 如果我有一个数组a 索引列表inds和所需的轴 我可以使用 take 如下 import numpy as np a np arange 12 reshape 3 1 i
  • TypeScript 属性装饰器:访问其他属性

    我有一个这样的类点 class Point test admin x number 6 y number 5 使用测试装饰器 function test myValue string function t target Object pro
  • T-SQL 列表表、列

    在 T SQL SQL Server 2000 中 如何列出数据库中的所有表和列 此外 在单独的查询中 有一种方法可以列出所有列以及数据类型和约束 NULL 等 谢谢 请查看信息图式 http learn microsoft com en
  • 如何使用 Objective C 将应用程序分配到 Mac OS X Lion 的所有桌面(空间)?

    我正在尝试在 Mac OS X Lion 上创建一个应用程序 该应用程序需要将应用程序分配给所有桌面 空间 这可以通过右键单击应用程序的停靠栏图标并选择来手动完成选项 gt 分配到 gt 所有桌面 但是 我需要找到一种通过 Objectiv
  • Bootstrap(3.1.1) 字形在 Firefox 中不起作用

    我偶然发现了 Bootstrap Glyphicons 无法与 Firefox 配合使用但与其他浏览器配合正常工作的问题 Q How to make Glyphicons from Bootstrap 3 1 1 work with fir
  • 启用 GlassFish 压缩

    如何启用玻璃鱼压缩 我在 http lister 属性中启用了压缩 但没有改变回应 登录管理控制台 localhost 4848 前往Network Config gt Network Listener 选择要启用 gzip 的侦听器 gt
  • Arduino Nano 上的 WiFi

    我无法找到的虚拟问题 我用来将 WiFi 802 11b g n 添加到 Raspberry Pi 的扩展板也可以在 Nano 上使用吗 换句话说 向 Arduino Nano 板添加 WiFi 有多容易 可行 Thanks Arduino
  • 设置 xcode 项目的默认字体样式、颜色和大小

    我正在开发的应用程序有一个特定的配色方案 所以我想知道是否可以设置 默认 背景颜色 文本颜色和字体大小 以便每次我在界面中创建新视图或标签时Builder 我不必更改所有这些参数 从 iOS 5 开始 有UIAppearance所有标准 U
  • useLocation 挂钩即使在硬刷新时也能保持状态

    在做一个项目时 我注意到一个奇怪的行为useLocation我找不到解释的钩子 我有一个按钮 单击它会将您重定向到EditOrder页面并将传递一个状态 const navigate useNavigate const handleClic
  • Django Websockets 数据发送到错误的套接字

    使用 Django Websockets Channels 我创建了一个 一个 组 并且来回消息工作得很好 我们称之为A组 当我在不同的浏览器中打开第二个组和第二个 我们称之为 B 组 WebSocket 连接时 问题就开始了 我尝试发送到
  • 在运行时更改 Angular 中的区域设置?

    我正在做一些关于在运行时更改 Angular 区域设置的研究 并发现了这个线程 如何在 Angular 2 的 DatePipe 中设置区域设置 https stackoverflow com questions 34904683 how
  • 将 POS 标签从 TextBlob 转换为 Wordnet 兼容输入

    我使用 Python 和 nltk Textblob 进行一些文本分析 有趣的是 您可以为 wordnet 添加 POS 以使同义词搜索更加具体 但不幸的是 nltk 和 Textblob 中的标记与 wordnet 对其同义词集类期望的输
  • 如何检索商店状态的旧值和新值

    在我的组件中 我试图获取在 vuex 存储状态中分配的特定对象数组的旧值和新值 如下所示 但是 当我 newArray 和 oldArray 返回相同的对象数组时 我从以下文档中了解了以下内容 但我不明白检索不同版本的最佳方法是什么 注意