vue数据流动问题

  1. computed某个函数内只要有一个值发生变化,这个函数就会重新执行

  2. vue父传子props传值,值传递与引用传递

    父传子,传的值(包括引用数据类型和基本数据类型),
    子组件改变的时候,如果是引用地址发生改变(传过来的数组直接被重新赋值为另一个),父组件不改变,并且会报错,如果引用地址不变(数组被push,pop),父组件的值会发生改变。
    对象也是同理。
    
  3. 页面一加载的时候,子组件的watch某个父传子的值a,a采取了 immediate: true,才可以打印出来。

    因为immediate: true是立即触发函数,不加immediate: true的watch是只有监听到现存数据发生改变时,才发生改变。首先props里面父组件的值(watch监听的值)早在watch前就已存在,且没有改变。
    
  4. 两种情况
    父组件一开始传递的是undefined
    父组件一开始传递的是非undefined(包括空字符串)

    第一种,父组件传的是undefined,子组件props中有default的话,采取default的值;
    
    第二种,父组件传的是undefined,子组件props中有没有default的话,仍立即执行watch,但此值为undefined;
    
    第三种,父组件开始传的是非undefined,子组件props中有或没有default的话,都使用此父组件的非undefined;
    
    
    后期异步的值过来的话,再次触发watch函数!
    
  5. 父子组件传值形成闭环
    我们知道,当父传子传的值,子组件如果直接对他的引用地址或栈内存的值(数字、字符串、对象直接重新赋值)发生改变,父组件是不会改变的,并且会报错。但是只对堆内存中的内容改变是可以的(数组的增删元素,对象内属性值的改变)。但是在实际业务中又存在这种问题,子组件直接将对象或数组或字符串重新赋值,我总结了两种方法。
    第一种:父传子之前将这个数据包一层对象。
    第二种,子组件接收时,改变这个数据的事件中(重新克隆一份父组件传过来的数据,操作位,$emit抛给父组件)
    这里只针对第二种方法讲解:

     _change1() {
          //新值               老值
            this.ttString = this.tString;
            this.ttString = 'ffffffff'
            this.$emit('nice',this.ttString)
         }
    
    
      nice(v){
                console.log(v);
                this.tString= v;
            }
    

    这样出现的问题就是其他子组件所使用的tString全部改变,我们也可以不形成一个闭环(nice内不赋值)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值