vue3的watch除了监听指定的对象,回调函数里的对象为什么也被监听了?

场镜

做一个复选框全选功能,复选框绑定一个checkedAll的ref,然后其他选项比较多,我使用了一个reactive,然后我监听checkedAll,循环更改其他复选框。

代码

const keyList = [

{ key: 'name', text: '姓名' },

{ key: 'age', text: '年龄' },

{ key: 'hobby', text: '爱好' },

]

watch(checkedAll, () => {

keyList.forEach((item) => {

checkData[item.key] = checkedAll

})

})

现象

全选功能没问题,点击全选之前,单独点击下面的选项,全选不受影响,但是点击过全选之后,也就是watch执行后,再点击下面的选项,全选也会受影响,然后就又执行watch了。

为什么执行过watch后,checkData的更改也被监听了呢?


回答:

watch(checkedAll, () => {

keyList.forEach((item) => {

// 是否少写了.value

checkData[item.key] = checkedAll.value

})

})


回答:

import { ref, reactive, watch } from 'vue'

const keyList = [

{ key: 'name', text: '姓名' },

{ key: 'age', text: '年龄' },

{ key: 'hobby', text: '爱好' },

]

const checkedAll = ref(false)

const checkData = reactive({

name: false,

age: false,

hobby: false

})

watch(checkedAll, (value) => {

// 在 $nextTick 回调函数中更新组件的状态

nextTick(() => {

keyList.forEach((item) => {

checkData[item.key] = value

})

})

})

以上是 vue3的watch除了监听指定的对象,回调函数里的对象为什么也被监听了? 的全部内容, 来源链接: utcz.com/p/934061.html

回到顶部