## code computedPropA:{{ computedPropA("oup") }} 点击 //响应式属性 const beforeData = ref("") //计算属性 const computedPropA = computed(() => { console.log("执行计算函数,重新计算 计算属性:computedPropA") //直接返回一个函数对象 return (data) => { return data + beforeData.value } }) function handleClick() { //随机生成字符串 let randomString = $utils.randomString(5); beforeData.value = randomString; } //监听计算属性 watch(computedPropA,(newVal, oldVal) => { console.log("computedPropA watch ", newVal, oldVal) }) ### 问题 在这个场景中, 计算属性返回了一个函数对象,在dom模板中 使用这个计算属性需要以函数的形式使用。 对于上面的场景有几个问题: 1. 计算属性返回了函数对象,函数对象内部使用到了响应式数据,那么响应式数据更新的时候,该计算属性computed函数的参数getter函数是否会被重新执行? 2. 响应式数据更新时 ,是否会引起dom中 重新执行 computedPropA("oup") 这个函数,重新计算。 3. 响应式数据更新时 ,watch 计算属性是否 会执行。 实际测试结果: 1.计算属性只会被定义一次,computed函数的参数getter函数 不会随着beforeData的变化而重新执行。 这一点理解起来还凑合。简单理解computed的参数函数中没有使用到响应式属性,所以beforeData的变化不会引起 计算属性被重新计算。 但是深究起来 这个计算属性到底有没有依赖到响应式属性? 2.dom 会重新计算,这个不理解。 3.watch不会执行。原因见1. 各位vuer来帮忙解答一下,拜托了. ## 补充一个关联问题 在上面的问题中是 返回了一个函数,如果 computed 返回一个 普通的对象 const computedPropB = computed(() => { return { data: "abc", } }) 然后 通过 按钮点击的时候 给这个 computedPropB 随机增添属性名和属性值。 function handleClick() { //随机生成字符串 let randomString = $utils.randomString(5); // beforeData.value = randomString; let propName = $utils.randomString(5); let propvalue = $utils.randomString(3); //随机新增属性 computedPropB.value[propName] = propvalue } dom模板中 computedPropB:{{ computedPropB }} 是否会实时更新? 补充问题 新开了 一个问题: