in packages/core/src/rendering/render-chunk.tsx [445:474]
private internalRemoveChild(child: ChildType) {
const childParentData = child.parentData!
assert(this.debugUltimatePrevSiblingOf(child, this._firstChild))
assert(this.debugUltimateNextSiblingOf(child, this._lastChild))
assert(childParentData.chunk === this, 'child 已分配的 chunk 不是自己')
assert(this._childCount >= 0)
if (!childParentData.prevSiblingInChunk) {
// 子节点是 firstChild
assert(this._firstChild === child)
this._firstChild = childParentData.nextSiblingInChunk
} else {
const childPrevSiblingParentData = childParentData.prevSiblingInChunk.parentData!
childPrevSiblingParentData.nextSiblingInChunk = childParentData.nextSiblingInChunk
}
if (!childParentData.nextSiblingInChunk) {
// 子节点是 lastChild
assert(this._lastChild === child)
this._lastChild = childParentData.prevSiblingInChunk
} else {
const childNextSiblingParentData = childParentData.nextSiblingInChunk.parentData!
childNextSiblingParentData.prevSiblingInChunk = childParentData.prevSiblingInChunk
}
childParentData.prevSiblingInChunk = undefined
childParentData.nextSiblingInChunk = undefined
childParentData.chunk = undefined
child.offstage = true
this._childCount -= 1
this._layoutDirty = true
this._paintDirty = true
}