vm.$watch实现原理

本文介绍了Vue.js中vm.$watch的用法和实现原理。$watch不仅可以监听字段或计算属性,还可以监听函数的返回值变化。深入探讨了watcher类在响应式原理中的作用,特别是当设置deep参数时如何进行深层监听。在阅读源码的过程中,还发现了用于解析如'a.b.c'这类字符串取值的工具函数。
摘要由CSDN通过智能技术生成

vm.$watch实现原理

前言

vm.$watch这个api在工作中用得还是比较少,应该多数人都会直接在组件内写watch,而不会直接调用这个api来对数据进行监听,大概看了下其源码,写篇博记录一下。

用法

之前也看过vue文档,但是有一些细节并没有看,现在回过头来发现文档上还是有不少有用的细节没有发现,先放一下$watch的用法
参数:

/*
* @param {string|Function} exOrFn 
* @param {Function|Object} callback
* @param {Object} options
*/
vm.$watch(exOrFn,callback,[options])

返回值 :{Function} unwatch
具体用法:用于监听某个表达式或者是计算属性在实例上的变化,每当变化时触发回调,并可以在回调内获取到新数据以及旧数据。
以前一直以为这个api的第一个参数表示某个字段或者是计算属性,现在才知道也可以传一个函数,监听函数里面用到的依赖,然后在回调函数里能得到函数的新的返回值以及旧的返回值。这一点感觉起来应该和计算属性有点联系。

原理

关于watch的基本原理大体也和vue的响应式原理一样,利用watcher类就能直接实现监听的功能。
代码:

Vue.prototype.$watch = function (
    expOrFn: string | Function,
    cb: any,
    options?: Object
  ): Function {
   
 	// api被调用时获取到vue实例
    const vm: Component = this
    // 判断一下cb是不是对象类型,是对象的话就调用一下createWatcher,
    //这个就像你在watch里面写一个对象一样,createWatcher会拿到你定义的key为handler的函数作为callback函数
    if (isPlainObject(cb)) {
   
      return createWatcher(vm, expOrFn, cb, options)
    }
    options = options || {
   }
    options.user = true
    // 设置监听
    const watcher =
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值