-
computed某个函数内只要有一个值发生变化,这个函数就会重新执行
-
vue父传子props传值,值传递与引用传递
父传子,传的值(包括引用数据类型和基本数据类型), 子组件改变的时候,如果是引用地址发生改变(传过来的数组直接被重新赋值为另一个),父组件不改变,并且会报错,如果引用地址不变(数组被push,pop),父组件的值会发生改变。 对象也是同理。
-
页面一加载的时候,子组件的watch某个父传子的值a,a采取了 immediate: true,才可以打印出来。
因为immediate: true是立即触发函数,不加immediate: true的watch是只有监听到现存数据发生改变时,才发生改变。首先props里面父组件的值(watch监听的值)早在watch前就已存在,且没有改变。
-
两种情况:
父组件一开始传递的是undefined
父组件一开始传递的是非undefined(包括空字符串)第一种,父组件传的是undefined,子组件props中有default的话,采取default的值; 第二种,父组件传的是undefined,子组件props中有没有default的话,仍立即执行watch,但此值为undefined; 第三种,父组件开始传的是非undefined,子组件props中有或没有default的话,都使用此父组件的非undefined; 后期异步的值过来的话,再次触发watch函数!
-
父子组件传值形成闭环
我们知道,当父传子传的值,子组件如果直接对他的引用地址或栈内存的值(数字、字符串、对象直接重新赋值)发生改变,父组件是不会改变的,并且会报错。但是只对堆内存中的内容改变是可以的(数组的增删元素,对象内属性值的改变)。但是在实际业务中又存在这种问题,子组件直接将对象或数组或字符串重新赋值,我总结了两种方法。
第一种:父传子之前将这个数据包一层对象。
第二种,子组件接收时,改变这个数据的事件中(重新克隆一份父组件传过来的数据,操作位,$emit抛给父组件)
这里只针对第二种方法讲解:_change1() { //新值 老值 this.ttString = this.tString; this.ttString = 'ffffffff' this.$emit('nice',this.ttString) } nice(v){ console.log(v); this.tString= v; }
这样出现的问题就是其他子组件所使用的tString全部改变,我们也可以不形成一个闭环(nice内不赋值)。
vue数据流动问题
最新推荐文章于 2023-11-15 08:29:01 发布