如何避免修改Nuxt 3组件props传入的原始嵌套对象?
回答
这个方案完全有效,核心原因是它解决了浅拷贝的局限性:
- 你最初使用的
{...props.objParent}属于浅拷贝,仅复制了对象的第一层属性。对于嵌套的title对象,浅拷贝后objChild.title和props.objParent.title仍指向内存中的同一个引用,所以修改子组件的嵌套属性会同步影响父组件的原始数据。 JSON.parse(JSON.stringify(props.objParent))是一种通用的深拷贝方式:它先将整个对象(包括所有嵌套层级)序列化为JSON字符串,再重新解析为全新的对象。这样objChild的所有嵌套属性都会拥有独立的内存地址,修改子组件的objChild时,父组件的原始数据不会再被波及。
需要注意该方案的适用边界:
- 无法拷贝函数、Symbol类型、存在循环引用的对象
- 会丢失对象的原型链
- Date类型会被转换为字符串,而非保留原始Date实例
如果你的objParent不包含上述特殊类型的数据,这个方案可以放心使用。
内容的提问来源于stack exchange,提问作者bmSoft
相关产品推荐
相关产品推荐

