CreateElement
1 | // 虚拟 DOM 结构 |
Render
1 | // 虚拟Dom,添加到真实节点 |
并发模式 (requestIdleCallback)
fiber
虚拟 Dom
构建虚拟 Dom
1 | console.log( |
虚拟 Dom 转换为真实 Dom
1 | Element.prototype.render = function () { |
填充页面
1 | document.body.appendChild( |
对比两棵树的差距
当新旧节点都是字符串类型时,直接替换
1 | if (_.isString(oldNode) && _.isString(newNode)) { |
新旧节点标签名和 key 相同,对比 porps 和 children
1 | if (oldNode.tagName === newNode.tagName && oldNode.key === newNode.key) { |
对真实 DOM 进行修改
据 diff 结果,对真实 DOM 进行修改。
1 | function patch(node, patches) { |