您的位置:首页 > 健康 > 美食 > Vue3 完美实现深拷贝

Vue3 完美实现深拷贝

2024/10/6 22:25:11 来源:https://blog.csdn.net/xiaohuihui1400/article/details/140469486  浏览:    关键词:Vue3 完美实现深拷贝

文章目录

  • 一、问题背景
  • 二、安装lodash
  • 三、Vue3实现完美深拷贝
  • 四、非外部库非完美的实现深拷贝


一、问题背景

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

在这篇文章记录了 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兼容的数据类型,如上所述。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com