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

发布于 2022-09-12 23:03:06 字数 1253 浏览 9 评论 0

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
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

凝望流年 2022-09-19 23:03:06

监听一个对象的话,在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;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文