前提:
- 讲这个东西的时候,前提是大家对vue2的响应式源码有一定的了解 并且使用过reactive 这样大家心里会有一个很好的对比。不过没看过vue2源码也不重要,认认真真看vue3的源码也来得及,有的小伙伴肯定是已经等着急了吧。接下来 我们就赶快开始吧。
举例让大家明白的更快点
首先写一个关于proxy实例 给大家理解下
- 其实上述的实例中我们用到proxy关键字,也许很多同学已经猜测到了,其实vue3的响应式核心就是proxy,proxy翻译过来其实就是代理的意思
- 使用proxy来代理对象,proxy中第一个参数其实就是代理对象,第二个参数其实就是proxy对应的api的方法,方法种类有十几种,这个大家可以问下“度娘”
- 在实例化proxy后,会得到proxy实例,我们通过操作实例来进行各种增删改查。
- 当我们获取age的时候,会触发get方法,同样,修改age的时候,会触发set方法
- 其实这就是proxy的具体用法,通过代理的形式我们知道了用户对变量是获取还是设置 从而做对应的处理
开始搞源码
- 调用reactive方法的时候比较简单,我们传递代理的target对象就行,之后就开始调用方法{createReactiveObject}了,我就不过多的解释了,有的同学肯定会说:停停停。这个参数啥意思啊。为啥不解释啊。好吧,小编这里给大家解释下,这里其实我们用到最多的参数是第一个以及最后一个,第一个肯定知道吧就是代理对象,那最后一个是什么呢?其实就是对应proxy api,例如我们上面写的get set方法
- 首先映入眼帘的就是一个判断if (!isObject(target)),说明了reactive代理的必须是一个对象,不是对象是不行的,这个时候又有同学插嘴了:那普通值我想代理怎么办呢,难道我还得外面包装对象吗。我说:no no no 大家忘记了方法{ref}了吗 这个ref的源码,在之后会给大家解析
- 通过变量这个{existingProxy}我们其实看到了另外一个判断,这个判断其实很简单,就是如果之前已经代理过了直接返回就可以
- 接下来出现大家眼熟的内容了,对了,就是new proxy。所以reactive核心其实就是new proxy,其中传递的参数无非是代理的对象以及方法
结尾
好了 虽然reactive原理解析完了,是不是很简单啊。如果会的同学就当一个笑话看,觉得对自己有用的留言点赞就好。之后小编会把自己看的vue3的源码 挨个跟大家分析,希望大家指正。(给大家透露下:ref toRefs compued watch createApp等 这些源码都会挨个解析哦)
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END