Vue provide/inject 部分源码分析 实现响应式数据更新

原创 Fly丶 教程 vue专题 307阅读 2018-10-11 22:05:27 举报

下面是我自己曾经遇到 一个问题,直接以自己QA的形式来写吧

自问自答了,需要的同学也可以直接访问 segmentfault地址

官网给出实例,说本身是不支持数据响应式的, 但是可以传入响应式数据,那么provide,inject就可以实现响应式。

我这里理解应该没错哈,有不对的地方请指出。

我自己写的demo,做了如下更改

parent 页面:

child页面:

 通过上面2个方法,经过验证,子组件页面都没办法实现响应更新this.foo的值。
 求解释,谢谢

以上是我自己的问题, 下面是我基本理解后,在自己回答的问题

现做了如下修改,可以达到父亲组件改变,下面的孙子组件都能更新数据.这样就是传入了一个响应式数据,如果需要双向数据的话,需要在child页面的computed 中手动写set 函数,computed 本身就只相当于一个get函数。

值得注意是:child页面data 数据中childfooOld并不会响应。这个点还没搞懂。

parent页面:

child页面:

关于prodive 和inject 源码部分如下

可以看出 prodive 也运用了defineReactive 函数,增加了自身的set,get函数,也是响应式数据,如下图

如下 是inject 源码,我没看出来那里明确增加了set/get,但是打印出来结果inject 也是有set/get的

通过computed 就实现了上下传值,个人疑问就是 
child页面,直接把foo 绑定到data属性下,foo变化时,child中的data不变化。。 按道理,data中有get/set ,应该也是响应的,求大神分享
发现文章中的错误,或者有更好的建议,欢迎评论或进前端全栈群:866109386,来交流讨论吹水。

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复