指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub

vue3数组引用传递的问题

//如下定义了一个ref类型的数组:
const selectedData = ref<number[]>([6, 7, 8, 9]);

const modifySelectedData = (data: Ref<number[]>) => {
  data.value.splice(1, 1);  // 修改了传入的 Ref 数组,删除一个元素
};

modifySelectedData(selectedData);

console.log(selectedData.value);  // 结果是 [6, 8, 9]

如何解决副作用

const modifySelectedData = (data: Ref<number[]>) => {
  const copiedData = [...data.value];  // 创建副本
  copiedData.splice(1, 1);  // 修改副本
  console.log(copiedData);  // 修改后的副本
};

const selectedData = ref<number[]>([6, 7, 8, 9]);

modifySelectedData(selectedData);

console.log(selectedData.value);  // 原始数据未被修改 [6, 7, 8, 9]
const modifySelectedData = (data: Ref<number[]>) => {
  const copiedData = [...data.value];  // 创建副本,可以通过传递副本来避免这种副作用
  copiedData.splice(1, 1);  // 修改副本
  console.log(copiedData);  // 修改后的副本
};

const selectedData = ref<number[]>([6, 7, 8, 9]);

modifySelectedData(selectedData);

console.log(selectedData.value);  // 原始数据未被修改 [6, 7, 8, 9]