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

javascript - vue3中, 将A赋值给B,然后修改A, B也会跟着修改吗?

殷烨
2023-05-17
const myOptionalList = ref([])

const currentOptional = reactive({
  red: [],
  blue: []
})

const handleChange = () => {
    myOptionalList.value = [currentOptional, ...myOptionalList.value]
    // myOptionalList.value = JSON.parse(JSON.stringify([currentOptional, ...myOptionalList.value]))
    currentOptional.red = []
    currentOptional.blue = []
}

在vue3中, 如果我按上面的写法,将currentOptional赋值到了myOptionalList中后, 清空currentOptional,发现myOptionalList也会被清空

我知道这是引用传递的问题,解决方法是进行深拷贝, 但是我有点疑惑,我记得vue2中好像不存在这种问题啊, 是我记错了吗

共有2个答案

陆俊迈
2023-05-17

structuredClone

皇甫飞飙
2023-05-17

你拷贝的是数组,数组的引用并没有解除。需要单独解构currentOptional中的每一个值是数组的属性。

 类似资料:
  • 问题内容: 我以为我知道Python,直到今晚。做这样的事情的正确方法是什么?这是我的代码: 基本上,我想知道,而不是该步骤,我将如何正确地制作列表或字典的副本,以便更改时不会随之更改? 问题答案: 您正在体验的是引用的概念。Python中的所有对象都有一个引用,当您将一个名称分配给两个名称和时,这将导致两者并指向 _同一_对象。 随着名单,你可以创建一个新的列表是一个 副本, 另一个使用。 有关

  • 问题内容: 如果我有 然后,如果我创建 并执行 自行车的速度也会改变吗?如果没有,那有什么办法吗? 问题答案: 是的,它将改变。Java Assignment操作仅创建对该对象的新 引用 。换句话说写类似 会 不会 复制对象中的所有值。objectA和objectB都指向该类的相同 实例 。 如果要复制对象的所有值,则应查看克隆

  • 问题内容: 这是我的第一个问题,我开始学习Python。之间有什么区别: 和 在下面的示例中编写时,它显示不同的结果。 和 问题答案: 在中,在将右侧的表达式赋给左侧之前对其求值。因此,它等效于: 在第二个示例中,运行时已更改的值。因此,结果是不同的。

  • 我尝试了一些代码在Java中交换两个整数,而不使用第三个变量,即使用XOR。 以下是我尝试的两个交换函数: 该代码产生的输出如下: 我很想知道,为什么会有这样的说法: 和这个不一样?

  • 问题内容: 我在Twitter上看到了这个Python代码段,并对输出感到困惑: 这里发生了什么? 问题答案: 从 Assignment语句 文档中 : 赋值语句评估表达式列表(请记住,它可以是单个表达式或逗号分隔的列表,后者产生一个元组),并将单个结果对象从左到右分配给每个目标列表。 您有两个分配目标列表;,和,该值从左到右分配给这两个目标。 首先,将元组解包到。您现在有和。注意这是可变的。 接

  • 问题内容: 我尝试了一些代码,使用XOR在Java中交换两个整数而不使用第三个变量。 这是我尝试的两个交换函数: 这段代码产生的输出是这样的: 我很好奇,为什么这样说: 与这个不同吗? 问题答案: 问题是评估的顺序: 参见JLS第15.26.2节 首先,对左操作数求值以产生一个变量。 如果该评估突然完成,则赋值表达式由于相同的原因而突然完成;右边的操作数不会被评估,并且不会发生赋值。 否则,将保存