Vue3 完美实现深拷贝

36 篇文章 10 订阅 ¥19.90 ¥99.00


一、问题背景

在复制表单之后,对表单进行修改,发现所有表单的值都同时改变,分析:表单没有进行深拷贝,而是引用的其它表单的值。

在这篇文章记录了 Vue2 实现深拷贝:Vue 双重v-for渲染表单,再复制表单编辑之深拷贝

在 Vue3 中,仍然可以和 Vue2 使用 require('lodash').cloneDeep 类似的方式来进行深拷贝。Vue3 的模块系统和 Vue2 相比没有根本性的变化,它依然支持CommonJS的require语法(尽管在使用如Vite这样的现代前端工具时,ES模块导入import是更推荐的方式)。

二、安装lodash

如果你还没有安装 lodash ,可以通过 npm 或 yarn 来安装:

npm install lodash
# 或者
yarn add lodash

三、Vue3实现完美深拷贝

使用 import 代替 require,你可以这样使用 lodashcloneDeep 函数:

import cloneDeep from 'lodash/cloneDeep';

const obj = { a: 1, b: { c: 2 } };
const newObj = cloneDeep(obj);

这种方式更加现代,也是目前大多数JavaScript项目推荐的做法。

四、非外部库非完美的实现深拷贝

虽然 lodashcloneDeep 是一个非常强大且通用的深拷贝函数,但在某些情况下,你可能不需要引入外部库来实现深拷贝。例如,如果你要拷贝的对象只包含JSON兼容的数据类型(即没有函数、正则表达式对象、日期对象等),你可以使用原生的JSON方法来实现深拷贝:

const obj = { a: 1, b: { c: 2 } };
const newObj = JSON.parse(JSON.stringify(obj));

请注意,这种方法有其局限性,它不能正确处理非JSON兼容的数据类型,如上所述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一碗情深

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值