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兼容的数据类型,如上所述。

相关推荐

  1. Vue3 完美实现拷贝

    2024-07-19 14:18:03       22 阅读
  2. 拷贝实现方法

    2024-07-19 14:18:03       55 阅读
  3. 拷贝实现方式

    2024-07-19 14:18:03       28 阅读
  4. vue 封装对象拷贝方法

    2024-07-19 14:18:03       45 阅读
  5. 拷贝和浅拷贝的区别,如何实现一个拷贝

    2024-07-19 14:18:03       32 阅读
  6. 拷贝拷贝全面解析及实战

    2024-07-19 14:18:03       25 阅读
  7. 拷贝与浅拷贝

    2024-07-19 14:18:03       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 14:18:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 14:18:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 14:18:03       58 阅读
  4. Python语言-面向对象

    2024-07-19 14:18:03       69 阅读

热门阅读

  1. 70、Flink 的 DataStream Connector 之 JDBC 连接器详解

    2024-07-19 14:18:03       20 阅读
  2. MySQL简介

    2024-07-19 14:18:03       20 阅读
  3. iOS 左滑返回事件的控制

    2024-07-19 14:18:03       18 阅读
  4. 八段锦1.1.9-冥想1.2.9

    2024-07-19 14:18:03       22 阅读
  5. 邦芒贴士:和领导相处必须牢记的五个教训

    2024-07-19 14:18:03       19 阅读
  6. Binary Search

    2024-07-19 14:18:03       19 阅读
  7. C 语言实例 - 矩阵转换

    2024-07-19 14:18:03       21 阅读
  8. 升级TrinityCore 服务器硬件

    2024-07-19 14:18:03       20 阅读