拷贝引起的bug

113 阅读1分钟

背景

今天在项目中需要做一个表格,用的vue+ant-design-vue,把表格的data配置单独放在一个config里面,然后通过import引入到vue文件中,再把配置分配给vue文件中的一个变量,如下图所示

配置文件中

import { reactive } from "vue";
export const data = reactive([
  {
    key: "1",
  },
]);
vue文件

<template>
  <div></div>
</template>
<script setup>

import { data } from "./config";
import { ref, watch } from "vue";

const tableData = ref(data);       把data给到tableData

watch(
  () => tableData.value,
  () => {
    tableData.value.push({
      key: "4",
    });
  },
  { immediate: true }
);
</script>

<style></style>

BUG

watch当数据变化去更新tableData

问题出现了,此时更改的是tableData的值,但是当我打印data的时候,却发现data也被更改了,直接懵逼了,根本想不明白,还以为哪里错了,先看一下打印

Snipaste_2022-08-26_23-43-48.png 100%不对,从上午,一直到下午一直在反复查这个问题,然后再config文件夹也尝试打印一下,直接震惊我

Snipaste_2022-08-26_23-45-39.png

刚定义,立马就变了,10个脑袋也想不明白,现在也不明白,难道这个是异步执行的??

Snipaste_2022-08-26_23-46-05.png

这个应该是一个拷贝问题,两个对象指向一个地址,更改一个,另一个就变了,后面我才明白过来,只要把data解构就行了,记录一次心酸的找bug,难受的一笔

解决方法

最后的解决方法

Snipaste_2022-08-26_23-49-46.png