vue 解析copy问题及解决办法

vue金典copy问题:

父组件传值给子组件时,子组件直接使用,会直接污染原数据;

父组件:

原数据 data:[{id:1},{id:2},{id:3}];

当data传入子组件使用时直接使用data,循环渲染时会直接影响原数据

子组件:

需要使用数据 this.list = this.data;

子组件使用list渲染,父组件对应的值会跟着list变化而变化,渲染id:1时,返回继续渲染id:2时发现原数据变成id:1,原数据污染;

这里说明vue组件传值根本问题没有避免

父组件传值原则:父组件跟子组件值避免直接使用,父组件传值必须使用一个不常使用的值,推荐传值时在进行赋值操作,且该值并不在父组件进行渲染或使用;

子组件传值原则:传值同上;

子组件接收值时注意:组件接收值时应做好最后一道防线,传过来的数据有使用应深度copy传过来的值并附给自己需要使用的值,在进行自己内部使用;

解决!

copy:

实例数据:this.a = {id:1};

浅度copy同等于我们普通赋值;例如:this.b = this.a;

深度copy:① this.b = JSON.parse(JSON.stringify(this.a));

                  ② this.b = {...this.a};

区别:第一种方法使用js原生方法进行copy,在个个版本的js中均可使用;原理:对一个数据进行两次转换,当转换第一次时原数据类型发生改变,    自动生成一个新的数据,在对新生成的数据进行二次转换成我们需要的数据,实现深度copy; == Object转String在转Object;

第二种方法使用ES6解构赋值进行深度copy,原理:...把数据全部展开并且一一对上;详情请查看ES6解构赋值:https://www.runoob.com/w3cnote/deconstruction-assignment.html


前端小白继续加油

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容