问答

vue3watch监听props的数据发现oldProps和newProps一样?

作者:admin 2021-04-17 我要评论

SelectDevice.vue是一个通用的弹窗组件,根据父组件的传来的curKey来判是否是不同的调用者来调用的,如果是相同的调用者则之前选择的数据不删除,如果是不同的调...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)
SelectDevice.vue是一个通用的弹窗组件,根据父组件的传来的curKey来判是否是不同的调用者来调用的,如果是相同的调用者则之前选择的数据不删除,如果是不同的调用者调用则删除上次选择的数据,但是几次测试发现oldProps和newProps的一样,就好像没有保存上传的数据一样?是什么原因

image.png

//子组件 SelectDevice.vue

image.png

// 父组件
 <el-form-item label="所需配件">
    <el-input
        v-model="itemText2"
        readonly
        class="device-input"
        suffix-icon="el-icon-suitcase"
        @click.prevent="switchSelectRepair(true, 'repairFormData-pattenId')"
        >
    </el-input>
</el-form-item>
<el-form-item label="机型">
    <el-input
        v-model="itemText3"
        readonly
        class="device-input"
        suffix-icon="el-icon-suitcase"
        @click.prevent="switchSelectRepair(true, 'repairFormData-spareId')"
        >
    </el-input>
</el-form-item>
<SelectDevice @checked="updateData" :curKey="curkey" :isSelectRepair="isSelectRepair" @switch="switchSelectRepair" />

const switchSelectRepair = (flag:boolean, key?) => {
    isSelectRepair.value = flag
    if (flag && key) {
        curkey.value = key
    }
}
###

监听一个对象的话,在Vue中,目前的设计就是如此。Vue 官网有说明了,旧值和新值引用同一个对象/数组,所以相同。

可以看下这两个 issue:

https://github.com/vuejs/vue-...

https://github.com/vuejs/vue-...

可以用 Vue3 侦听多个源的方式,对需要监听的值进行监听

watch([fooRef, barRef], ([foo, bar], [prevFoo, prevBar]) => {
  /* ... */
})

又或者可以通过一些手段,如

const obj = reactive({ a: 1, b: 2 });
const newObj = computed(() => {
  return JSON.parse(JSON.stringify(obj));
});
watch(newObj, (val, oldVal) => {
  console.log('oldVal :>> ', oldVal);
  console.log('val :>> ', val);
});
obj.a = 666;

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • nginx响应速度很慢

    nginx响应速度很慢

  • 点击选中的多选框,会在已选那一栏显示

    点击选中的多选框,会在已选那一栏显示

  • PHP 多态的理解

    PHP 多态的理解

  • 关于C语言中static的问题

    关于C语言中static的问题

腾讯云代理商
海外云服务器