本篇内容主要讲解“vue使用源码分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue使用源码分析”吧!生命周期1.0版本1.哪些生命周期接口2.执行顺序1. 不具有keep-alive进入:init->create->beforeCompile->complied->attatched->ready移出:beforeDestory->detached->destoryed;2. 具有keep-alive第一次的时候进入:init->create->beforeCompile->complied->attatched->ready移出:detached;之后的每次进入:attatched移出:detached钩子函数3.钩子函数有哪些data
activete
deactivate
canactivate
candeactivate4.执行顺序进入:canactivate->actiavte->date移出:candeactivate->deactiavte两者一起出现5.对于一个组件A里面有子组件B,当这个组件A进行移入和移出操作时,组件之间的生命周期喝钩子函数的执行顺序参考如下:例如A.vue备注:下面括号里的是嵌套的子组件1. 不具有keep-alive:移入:1. canActivate;
2. init;
3. create;
4. beforeCompile;
5. (嵌套子组件:init,create,beforeCompile,compile);
6. compile;
7. activate;
8. data;
9. attached;
10. (子组件attached);
11. (子组件ready);
12. ready;移出:13. canDeactivate;
14. deactivate;
15. beforeDestroy;
16. (子组件beforeDestroy);
17. (子组件destoryed);
18. detached;
19. (子组件detached);
20. destoryed;2. 具有keep-alive:移入:1. canActivate;
2. activate;
3. data;
4. attached;
5. (子组件attached);移出:6. canDeactivate;
7. deactivate;
8. detached;
9. (子组件detached);6.钩子函数activate和data的执行顺序涉及钩子函数异步 resolve 规则:1.如果钩子返回一个 Promise,则钩子何时 resolve 取决于该 Promise 何时 resolve。2.如果钩子既不返回 Promise,也没有任何参数,则该钩子将被同步 resolve。3.如果钩子不返回 Promise,但是有一个参数(transition),则钩子会等到transition.next(),transition.abort()或是transition.redirect()之一被调用才 resolve。4.在验证类的钩子,比如canActivate,canDeactivate以及全局 beforeEach 钩子中,如果返回值是一个布尔值 (Boolean),也会使得钩子同步 resolve。
7.根据什么可以确保界面已经更新完成,也就是说挂在完成执行生命周期attached说明已挂载
双向绑定与渲染机制1.数据的监听和触发(订阅和发布observer)src目录下observer:1. array.js
2. dep.js;(实现一个发布订阅对象)
3. index.js;(利用Object.defineProperty这个API,并为此属性设计一个特殊的 getter/setter,然后在 setter 里触发一个函数,达到监听的效果);下面是这部分的源码简化上面的监听与触发代码如下:src目录下directive.js在directive中可以看到一系列解析出来的属性,而directive的实例化可以在utils/lifecycle.js中看到。下面这段代码在Directive.prototype._bind中src目录下Watch.js:从下面的代码可以找到watcher对象通过addDep方法实现订阅2.前面说那么多关于双向绑定,其实这也是VUE内部的渲染机制,总结如下1. 通过 obser免费云主机域名ver 对 data 进行了监听,并且提供订阅某个数据项的变化的能力
2. 把 template 解析成一段 document fragment,然后解析其中的 directive,得到每一个 directive 所依赖的数据项及其更新方法。比如 v-text=”message” 被解析之后 (这里仅作示意,实际程序逻辑会更严谨而复杂):所依赖的数据项this.$data.message,以及相应的视图更新方法 node.textContent = this.$data.message
3. 通过 watcher 把上述两部分结合起来,即把 directive 中的数据依赖订阅在对应数据的 observer 上,这样当数据变化的时候,就会触发 observer,进而触发相关依赖对应的视图更新方法,最后达到模板原本的关联效果。3.vue是如何改进了v-for具有相同数据渲染出错的?数组的渲染未使用track-by的数组渲染内部缓存的默认id是数组的值value,意味着如果数组中存在相同的值,通过id获取的是相同的一个fragement片段,最后通过insertBefore操作DOM由于是相同的一个实例,故不会生效。渲染的结果是child2在child1前面使用track-by目的是自定义这个内部的id,使得数组中具有相同的值的几项都不会选择到相同的实例,对于使用track-by=’$index’还是其他唯一区分的id值有一定的区别,各有好处。使用$index使得反转的数据没有移动操作,而对于使用其他的id在顺序不一样的时候会有相应的移动操作。对象的渲染对象一般使用键作为内部缓存对象的id,通过track-by也可以自定义这个id提高性能。列表更新到此,相信大家对“vue使用源码分析”有了更深的了解,不妨来实际操作一番吧!这里是百云主机网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
这篇文章主要讲解了“ HashMap源码分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ HashMap源码分析”吧!HashMap基于哈希表的Map接口实现,是以key-value存储形式存在,即主要用来存…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。