当前位置: 首页 > wzjs >正文

温州网站建设选择乐云seo摄影网站建设任务书

温州网站建设选择乐云seo,摄影网站建设任务书,周口建设网站,微信小程序双人游戏情侣值传递,在vue3中深拷贝的解决方法 1. 浅拷贝使用结构赋值使用 Object.assign 2. 深拷贝使用 JSON.parse(JSON.stringify())使用 Lodash 的 cloneDeep使用递归函数手动实现深拷贝 3. 使用 Vue 3 的响应式系统相关工具使用 toRaw使用 markRaw 4. 使用第三方库使用 str…

值传递,在vue3中深拷贝的解决方法

      • 1. 浅拷贝
        • 使用结构赋值
        • 使用 `Object.assign`
      • 2. 深拷贝
        • 使用 `JSON.parse(JSON.stringify())`
        • 使用 Lodash 的 `cloneDeep`
        • 使用递归函数手动实现深拷贝
      • 3. 使用 Vue 3 的响应式系统相关工具
        • 使用 `toRaw`
        • 使用 `markRaw`
      • 4. 使用第三方库
        • 使用 `structuredClone`(现代浏览器支持)
        • 使用 `immer`
      • 总结

在 Vue 3 中,当你希望复制一个对象并确保对新对象的修改不会影响到原对象时,可以使用多种方法来实现这一点。以下是所有常见的解决方法及其适用场景:

1. 浅拷贝

浅拷贝只复制对象的第一层属性,对于嵌套的对象或数组,仍然会引用原始对象中的内容。

使用结构赋值
const original = { a: 1, b: { c: 2 } };
const shallowCopy = { ...original };
shallowCopy.b.c = 3; // 这会影响到原对象中的 `b` 对象
console.log(original.b.c); // 输出 3
使用 Object.assign
const original = { a: 1, b: { c: 2 } };
const shallowCopy = Object.assign({}, original);
shallowCopy.b.c = 3; // 这会影响到原对象中的 `b` 对象
console.log(original.b.c); // 输出 3

2. 深拷贝

深拷贝会递归地复制对象的所有层次,包括嵌套的对象和数组,生成一个完全独立的新对象。

使用 JSON.parse(JSON.stringify())

适用于简单的对象结构,但不支持函数、循环引用等复杂情况。

const original = { a: 1, b: { c: 2 } };
const deepCopy = JSON.parse(JSON.stringify(original));
deepCopy.b.c = 3; // 不会影响到原对象
console.log(original.b.c); // 输出 2
使用 Lodash 的 cloneDeep

Lodash 提供了一个强大的工具函数来处理复杂的对象结构。
首先安装 Lodash:

npm install lodash

然后在代码中使用:

import _ from 'lodash';const original = { a: 1, b: { c: 2 } };
const deepCopy = _.cloneDeep(original);
deepCopy.b.c = 3; // 不会影响到原对象
console.log(original.b.c); // 输出 2
使用递归函数手动实现深拷贝

如果你不想依赖外部库,也可以自己实现一个深拷贝函数。

function deepClone(obj) {if (obj === null || typeof obj !== 'object') {return obj;}if (Array.isArray(obj)) {const arrCopy = [];for (let i = 0; i < obj.length; i++) {arrCopy[i] = deepClone(obj[i]);}return arrCopy;}const objCopy = {};for (const key in obj) {if (obj.hasOwnProperty(key)) {objCopy[key] = deepClone(obj[key]);}}return objCopy;
}const original = { a: 1, b: { c: 2 } };
const deepCopy = deepClone(original);
deepCopy.b.c = 3; // 不会影响到原对象
console.log(original.b.c); // 输出 2

3. 使用 Vue 3 的响应式系统相关工具

Vue 3 提供了一些工具函数来处理响应式数据,虽然它们的主要用途不是用于深拷贝,但在某些情况下可能会有所帮助。

使用 toRaw

获取响应式对象的原始对象。

import { reactive, toRaw } from 'vue';const original = reactive({ a: 1, b: { c: 2 } });
const rawOriginal = toRaw(original);
// 注意:toRaw 只是获取原始对象,并不创建副本
使用 markRaw

标记一个对象永远不应该被转换为响应式对象。

import { markRaw } from 'vue';const original = { a: 1, b: { c: 2 } };
const markedRaw = markRaw(original);
// 标记后,Vue 将不会尝试将这个对象变为响应式

4. 使用第三方库

除了 Lodash 之外,还有其他一些流行的第三方库可以帮助你进行深拷贝。

使用 structuredClone(现代浏览器支持)

这是 JavaScript 原生提供的一个方法,支持深拷贝,但需要注意浏览器兼容性。

const original = { a: 1, b: { c: 2 } };
const deepCopy = structuredClone(original);
deepCopy.b.c = 3; // 不会影响到原对象
console.log(original.b.c); // 输出 2
使用 immer

Immer 是一个用于处理不可变数据的库,特别适合处理复杂的状态管理。
首先安装 Immer:

npm install immer

然后在代码中使用:

import produce from 'immer';const original = { a: 1, b: { c: 2 } };
const deepCopy = produce(original, draft => {draft.b.c = 3;
});
console.log(original.b.c); // 输出 2
console.log(deepCopy.b.c); // 输出 3

总结

根据你的具体需求选择合适的拷贝方法:

  • 浅拷贝:适合只需要复制对象的第一层属性的情况。
  • 深拷贝:适合需要完整复制整个对象树的情况,推荐使用 Lodash 的 cloneDeep 或者自己实现递归函数。
  • JSON.parse(JSON.stringify()):简单快捷,但不支持函数、循环引用等复杂情况。
  • 第三方库:如 Lodash 和 Immer 提供了更强大且灵活的解决方案。

通过选择合适的方法,你可以确保在修改新对象时不会影响到原对象的数据。


文章转载自:

http://KhYIcBpE.mnyzz.cn
http://AuRGQjSE.mnyzz.cn
http://dYVWi43p.mnyzz.cn
http://TnWxPjWl.mnyzz.cn
http://eSSh0oXF.mnyzz.cn
http://aKRElw24.mnyzz.cn
http://vJL5rhlp.mnyzz.cn
http://cvhOxRSs.mnyzz.cn
http://V8XWZ5c2.mnyzz.cn
http://pfwMYCNd.mnyzz.cn
http://JCRj0sNh.mnyzz.cn
http://DraBV4fT.mnyzz.cn
http://crLv7v87.mnyzz.cn
http://iWQUFIwO.mnyzz.cn
http://xmuvxIMR.mnyzz.cn
http://3pYC3g7T.mnyzz.cn
http://Gv6vRPEa.mnyzz.cn
http://BEDg1GPQ.mnyzz.cn
http://rr9OzLcn.mnyzz.cn
http://rd828PJA.mnyzz.cn
http://o34rpA50.mnyzz.cn
http://gkIaObsc.mnyzz.cn
http://b4QCaMjr.mnyzz.cn
http://UxUzFFtM.mnyzz.cn
http://LjcTES2T.mnyzz.cn
http://MezRSYQV.mnyzz.cn
http://WRXuxdIB.mnyzz.cn
http://T1ey5drx.mnyzz.cn
http://DGu3vXfs.mnyzz.cn
http://ByoLYj12.mnyzz.cn
http://www.dtcms.com/wzjs/763717.html

相关文章:

  • 网站被黑能查到是谁做的吗做网站构建
  • 建设维护网站 未签订合同做网站要多少
  • 专业网站建设技术注册进出口贸易公司条件
  • 退役军人事务部网站建设wordpress 首页显示产品
  • 浙江省建设监理管理协会网站外贸英才网
  • 服装时尚网站做三国的网站
  • 网站建设 维护购销合同承德网站建设作用
  • 网站固定通栏代码汉网网站建设
  • 宁夏网站建设一条龙可以做四级的网站
  • 网站设计教科书wordpress电脑微信登陆不了
  • 那些网站可做国外零售厦门市住房和城乡建设局网站
  • 网站备案 厦门郑州+高端网站建设
  • asp网站咋做重庆建设工程信息网怎么录入备案
  • 定制网站建设宝安西乡wordpress国内备份神器
  • seo流量排名门户seo在网站制作
  • 网站有哪些风格深圳网站制作要多少钱
  • 为什么要建立企业网站个人手机网站开发
  • 网站推广优化淄博公司青岛房产网链家
  • 商标查询官方网站商业网站建设视频教程
  • 摄影网站功能设计软件开发公司网站
  • 怎么做卖花的网站网站内怎么做搜索
  • 西安网站设计哪家好网站右侧二维码
  • 早晨网站建设邵阳网站建设公司
  • 做抛物线的网站玛丽与魔女之花网页设计教程
  • 湘潭建设网站WordPress微信SVG图标
  • 阿里云服务器做盗版视频网站吗网站怎么发邮件
  • 中小型企业 公司网站建设万网的怎么做网站地图
  • 做搜狗网站优化点软件开发发布平台
  • 公司免费网站it运维外包费用标准
  • 手机p2p网站开发seo案例分析