【bug】后端接口获取的对象,赋值后打印出来的值不对,已解决

经常会遇到一些小bug,多遇到几次就会熟悉是什么原因造成的了

当我从接口获取数据进行赋值的时候,从network里看接口返回的对象参数,和我赋值后自己定义的对象参数一比对,发现里面有些字段的值不对应,遇到这种情况,基本上都是因为我们拿到数据之后,又去其他地方进行了重新赋值

对象在内存里的地址都是同一个,所以后面的改动也会影响到前面赋值的地方

bug重现:一个表单类的页面,保存后会调获取详情的接口,当我赋值给自己定义的对象后,又把这个对象当作参数传到封装的子组件中,在子组件的watch中监听这个对象,做一些判断

写错的地方就在于监听里,将对象重新赋值了,正确的应该是给我需要的参数赋值对象里的值,我自己糊涂写反了

大概就是下面这样:
父页面,这里给form赋值之后,传到子组件中
在这里插入图片描述

父页面的子组件
在这里插入图片描述

子组件的prop
在这里插入图片描述

子组件的watch,bug引起的原因

 form: {
    
    
      handler(newVal) {
    
    
        if (this.id) {
    
    
            let code = this.deptOptions.find(v => newVal.deptCode == v.deptCode)
            if (!code) {
    
    
             this.form.deptCode = this.deptOptions[0].deptCode   //就是这里的三行写错了
              this.form.deptId  =  this.deptOptions[0].deptId  //form被重新赋值了
              this.form.deptName  =  this.deptOptions[0].deptName 

          }
        }
      },
      deep: true,
    },

子组件watch,正确写法

    form: {
    
    
      handler(newVal) {
    
    
        if (this.id) {
    
    
            let code = this.deptOptions.find(v => newVal.deptCode == v.deptCode)
            if (!code) {
    
    
         let obj ={
    
    
           deptCode: this.form.deptCode,
           deptId:this.form.deptId ,
           deptName:this.form.deptName ,
         }
         this.deptOptions.push(obj)
          }
        }
      },
      deep: true,
    },

猜你喜欢

转载自blog.csdn.net/weixin_49668076/article/details/131102323