VDOM和Render方法
1.用普通的JS对象去描述我们需要渲染的内容。
1 | const element = { |
对象所描述的DOM结构
1 | <div id="container"> |
2.实现对象转成DOM的Render方法
1)先实现一个简单的,只有type和props里的属性
1 | const element = { |
render方法
1 | function render(element, parent) { |
所描述的DOM结构
1 | <div id="container"></div> |
2)然后加入children属性
1 | const element = { |
render方法
1 | function render(element, parent) { |
所描述的DOM结构
1 | <div id="container"> |
3) 如果里面有纯文本类型
1 | const element = { |
render方法
1 | function render(element, parent) { |
所描述的DOM结构
1 | <div id="container"> |
4)对象中的监听事件处理
1 | const element = { |
render方法
1 | function render(element, parent) { |
所描述的DOM结构
1 | <div id="container"> |
顺带一提Mutation Observer API,稍微了解一点点
就是这个api可以监听DOM中的变化,不过不是实时监听,而是一段时间的变化的结果。如果文档中连续插入1000个<p>
元素,就会连续触发1000个插入事件,执行每个事件的回调函数,这很可能造成浏览器的卡顿;而 Mutation Observer 完全不同,只在1000个段落都插入结束后才会触发,而且只触发一次。
- 它等待所有脚本任务完成后,才会运行(即异步触发方式)。
- 它把 DOM 变动记录封装成一个数组进行处理,而不是一条条个别处理 DOM 变动。
- 它既可以观察 DOM 的所有类型变动,也可以指定只观察某一类变动。
1 |
|
参考资料