Invalid watch source: 8700713675579406. A watch source can only be a getter/effect function, a ref

一、问题

1.setup中使用 watch监听时报错:vue.esm.js?9b69:5059 [Vue warn]: Invalid watch source: 8700713675579406. A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.

found in

2.代码如下

        watch(currentOperaMsg.careid, (newval, oldval) => {
            console.log("reload",reload)
            reload();
        });

 二、解决方法

1.错误原因:watch监听的东西 不正确,上面的报错明确指出 watch只能监听一个 getter/effet 函数,或者一个ref变量,或一个reactive对象,或由上述三种类型组成的数组(一次性监听多个变量)。

   我代码中的currentOperaMsg 是响应式的对象。但是currentOperaMsg中的属性 careid不是响应式的。需要转换成一个 getter函数,才可以被正常监听

2.正确代码

        watch(() => currentOperaMsg.careid, (newval, oldval) => {
            console.log("reload",reload)
            reload();
        });

三、总结

1.setup中 watch监听的 只能是 一个 getter/effect函数(对应响应式变量才有其对应的getter函数),或一个ref变量、reactive类型的对象,或由上述三种类型组成的数组(一次性监听多个变量)

2.如果要监听的不是响应式数组或对象,要转换成响应式的才可以监听;对于响应式对象的属性需要用getter函数解析后才能监听.

3.特别注意:无论是组合式API还是选项式 API 都只能监听到响应式变量的 状态变化(组合式API:ref或reactive声明的变量及其属性;选项式API:data中声明的变量或通过vue.$set添加的属性,不能监听到普通对象的变化。

 

/*

希望对你有帮助!

如有错误,欢迎指正,非常感谢!

*/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值