没有手撸过virtual dom的人,肯未经授权,禁止复制转载。转载请注明出处:www.tangshuang.net定以为component就是virtua【访问 www.tangshuang.net 获取更多精彩内容】【关注微信公众号:wwwtangshuangnet】l dom了,但实际上不是,virtua原创内容,盗版必究。转载请注明出处:www.tangshuang.netl dom只是个依赖,生命周期这种东西只【版权所有】唐霜 www.tangshuang.net原创内容,盗版必究。是component自己臆想的,跟vir【本文受版权保护】【本文首发于唐霜的博客】tual dom没半毛关系。我自己写hs【本文首发于唐霜的博客】原创内容,盗版必究。t-virtual-dom之后,大致梳理【作者:唐霜】【作者:唐霜】清楚了生命周期的问题。我们来看下使用hs【原创内容,转载请注明出处】本文作者:唐霜,转载请注明出处。t-virtual-dom的代码:
【原创不易,请尊重版权】【原创不易,请尊重版权】let vdom = new HSTVirtualDOM({ template, state })
...
vdom.create()
...
vdom.mount('#app')
...
vdom.update(newState)
...
vdom.destroy()
看到来吧,这就是在完全没有compone本文作者:唐霜,转载请注明出处。【本文首发于唐霜的博客】nt情况下,怎么使用一个virtual 转载请注明出处:www.tangshuang.net著作权归作者所有,禁止商业用途转载。dom的过程。它提供来四个方法来进行操作本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshuang.net,create是生成vtree,这个时候原创内容,盗版必究。【访问 www.tangshuang.net 获取更多精彩内容】只有一个和DOMtree对应的js对象,本文作者:唐霜,转载请注明出处。本文作者:唐霜,转载请注明出处。这个对象就是vtree,完全按照DOMt本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。ree的结构生成,只不过它是一个js对象【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。。mount动作通过createElem著作权归作者所有,禁止商业用途转载。本文版权归作者所有,未经授权不得转载。ent,利用vtree创建来真正的DOM【版权所有】唐霜 www.tangshuang.net【原创不易,请尊重版权】结构,并挂载到传入的selector上。【访问 www.tangshuang.net 获取更多精彩内容】转载请注明出处:www.tangshuang.netcreate和mount这两个动作其实可【转载请注明来源】【作者:唐霜】以自动处理,如果实例化的时候传入来sel本文作者:唐霜,转载请注明出处。【转载请注明来源】ector,就自动调用这两个方法。
原创内容,盗版必究。【关注微信公众号:wwwtangshua著作权归作者所有,禁止商业用途转载。【未经授权禁止转载】ngnet】【作者:唐霜】未经授权,禁止复制转载。update和destroy是在外部调用【关注微信公众号:wwwtangshuangnet】【访问 www.tangshuang.net 获取更多精彩内容】的,不可以自动处理。update是传入新本文版权归作者所有,未经授权不得转载。【版权所有,侵权必究】的state,和老的state merg未经授权,禁止复制转载。原创内容,盗版必究。e之后更新界面。它的处理过程是,先通过c本文作者:唐霜,转载请注明出处。原创内容,盗版必究。reate创建一个新的vtree,通过d未经授权,禁止复制转载。【版权所有,侵权必究】iff算法得到新老vtree之间的差异,【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。然后把这些差异patch到真实的DOM节原创内容,盗版必究。【版权所有】唐霜 www.tangshuang.net点上。destroy则是把创建的真实DO【关注微信公众号:wwwtangshuangnet】著作权归作者所有,禁止商业用途转载。M,以及它们绑定的事件监听销毁。
【本文受版权保护】【本文首发于唐霜的博客】【关注微信公众号:wwwtangshua著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshuang.netngnet】【版权所有】唐霜 www.tangshu【本文受版权保护】未经授权,禁止复制转载。ang.net一个component干了什么事呢?它其原创内容,盗版必究。【未经授权禁止转载】实是对virtual dom的封装,完全本文版权归作者所有,未经授权不得转载。著作权归作者所有,禁止商业用途转载。暴露给外面的,不是virtual dom本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.net的方法,反而是一些围绕virtual d本文作者:唐霜,转载请注明出处。【本文受版权保护】om的辅助方法:
转载请注明出处:www.tangshua【作者:唐霜】【未经授权禁止转载】ng.net本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshu原创内容,盗版必究。【版权所有】唐霜 www.tangshuang.netang.net【未经授权禁止转载】let component = new Component()
->
· this.getDefaultProps()
· this.getInitialState() => state
· this.componentWillMount()
->
· this.render() => template,或者说render本身已经自建了vtree
this.vdom = new HSTVirtualDOM({ template, state })
->
· this.beforeCreate() // vue
this.vdom.create()
· this.created() // vue
->
this.beforeMount() // vue
this.vdom.mount(selector)
this.mounted() // vue
this.componentDidMount()
// 下面进入存在期
this.componentWillReceiveProps()
this.shouldComponentUpdate()
this.componentWillUpdate()
this.render() => newTemplate => this.vdom.template = newTemplate
this.beforeUpdate() // vue
this.vdom.update(newState)
this.componentDidUpdate()
this.updated() // vue
// 下面进入销毁期
this.componentWillUnmount()
this.beforeDestroy() // vue
this.vdom.destroy()
this.destroyed() // vue
// 这个时候对于hst-virtual-dom来说,vdom.vtree还在,如果想要彻底销毁,只需要this.vdom = null
这样你就可以看到,一个component未经授权,禁止复制转载。著作权归作者所有,禁止商业用途转载。是多么的不起眼,只不过在调用vdom的方【转载请注明来源】本文作者:唐霜,转载请注明出处。法前不断干一些看上去是生命周期,实际上是【版权所有】唐霜 www.tangshuang.net著作权归作者所有,禁止商业用途转载。一些在执行vdom操作前后的普通调用而已【转载请注明来源】本文版权归作者所有,未经授权不得转载。的函数。而对于一些初学者而言,拼命的研究【原创内容,转载请注明出处】【关注微信公众号:wwwtangshuangnet】生命周期函数,以为即掌握了react的精【未经授权禁止转载】【本文受版权保护】髓。
【本文受版权保护】未经授权,禁止复制转载。原创内容,盗版必究。本文版权归作者所有,未经授权不得转载。
