-
Notifications
You must be signed in to change notification settings - Fork 0
jiangxia/VDOM
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
## VDOM、VNODE跟HTML(DOM) 所谓的VDOM,就是用JS对象的形式来表示的DOM节点,因为没插入到页面中,只存在于内存中,所以是VDOM。 DOM树是由一个个元素节点(node)组成,VDOM同理,也是由一个个VNODE组成,VNOOD跟VDOM同理,是仅存在内存中的JS对象形式表现的NODE。 ## 步骤 一、构建VDOM 构建VDOM的思路很简单,就是把node转成vnode,然后再把vnode集成vdom插入到页面中,如同: HTML => VNODE => VDOM => HTML。 这是第一步,也是很关键的一步,在真实的DOM跟VDOM之间架起桥梁,后续才可以通过操作VDOM,来产生或改变呈现到页面的HTML。 具体的做法是,NODE节点都包括: type : 元素类型 props : 元素属性 children : 子元素集合 任何节点,最终都可以解析成以下的格式: {type:"div",props:{"style":""},children:[ {type:"img",props:{"src":"..."}} ]} HTML => Vnodes 基于打包工具实现自动处理 Gulp : 文件流管道操作 webpack : 模块化松耦合处理 rollup.js : ES6模块调用分析处理 ES6 : babel-core | babel-preset-env JSX - transform html : babel-plugin-transform-react-jsx rollup : rollup | rollup-plugin-babel 二、DIFF Virtual DOM & Update DIFF算法是React框架采用的方法。也就是如何判断DOM发生了变化、如何找到这个变化,然后实现差量更新。 DOM的变化主要有三种:appendChild、replaceChild、removeChild. 更新的过程,其实也是diff children的过程。第一步已经把DOM转成了VNODE,每个VNOOD都会有一个children,用于存储子节点,通过递归children的方式,就可以判断不同的children并对其操作。有以下几种情况: 1、没有旧的节点,则创建新的节点,并插入父节点。 2、如果没有新的节点,则摧毁旧的节点。 3、如果节点发生了变化,则用replaceChild改变节点信息 4、如果节点没有变化,则对比该节点的子节点进行判断,使用递归调用 三、Handle Props & Event DIFF props:同DIFF VDOM,找到props的不同,然后setAttribute跟removeAttribute 四、封装组件与应用 代码:HTML模板 + 业务逻辑 VM (view model ) 页面 V(View) => 数据:一般是由后台返回给前端的 M(Model) 如何构建MV-VM开发模式? 1. 模块化-松耦合:把不同业务按照模块划分开,实现松耦合 ES6 Module 2. 渲染模板-业务处理:Virtual DOM 3. 打包处理-代码检查、压缩等:webpack、rollup、gulp VM => ES6 Module + Virtual DOM + rollup打包工具
About
No description, website, or topics provided.
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published