in packages/core/src/rendering/render-view.ts [185:213]
protected internalRemoveChild(child: ChildType) {
const childParentData = child.parentData!
assert(this.debugUltimatePrevSiblingOf(child, this._firstChild))
assert(this.debugUltimateNextSiblingOf(child, this._lastChild))
assert(this._childCount >= 0)
if (!childParentData.prevSibling) {
// 子节点是 firstChild
assert(this._firstChild === child)
this._firstChild = childParentData.nextSibling
} else {
const childPrevSiblingParentData = childParentData.prevSibling.parentData!
childPrevSiblingParentData.nextSibling = childParentData.nextSibling
}
if (!childParentData.nextSibling) {
// 子节点是 lastChild
assert(this._lastChild === child)
this._lastChild = childParentData.prevSibling
} else {
const childNextSiblingParentData = childParentData.nextSibling.parentData!
childNextSiblingParentData.prevSibling = childParentData.prevSibling
}
childParentData.prevSibling = undefined
childParentData.nextSibling = undefined
this._childCount -= 1
if (this._yogaNode && child.yogaNode) {
assert(child.yogaNode.getParent(), '子节点的 yogaNode 必须有 parent') // todo 检查 parent 的引用是否是 this.yogaNode
this._yogaNode.removeChild(child.yogaNode)
}
}