2023-12-05 16:09:45 +08:00

36 lines
1.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

function getParentDOM(wip) {
let temp = wip;
while (temp) {
if (temp.stateNode) return temp.stateNode;
// 如果没有进入上面的 if说明当前的 fiber 节点并没有对应的 DOM 对象
// 那么就需要继续向上寻找
// 那么问题来了,为什么该 fiber 上面没有对应的 DOM 对象呢?
// 因为该 fiber 节点可能是一个函数组件或者类组件、Franment
temp = temp.return;
}
}
function commitNode(wip) {
// 1. 首先第一步,我们需要获取该 fiber 所对应的父节点的 DOM 对象
const parentNodeDOM = getParentDOM(wip.return);
// 2. 进行一个 DOM 操作
if (wip.stateNode) {
parentNodeDOM.appendChild(wip.stateNode);
}
}
function commitWorker(wip) {
if (!wip) return;
// 整个 commitWorker 里面的提交分三步走:
// 1. 提交自己
// 2. 提交子节点
// 3. 提交兄弟节点
commitNode(wip); // 提交自己
commitWorker(wip.child); // 提交子节点
commitWorker(wip.sibling); // 提交兄弟节点
}
export default commitWorker;