in packages/core/src/rendering/render-chunk.tsx [382:426]
private internalInsertAfter(child: ChildType, after?: ChildType) {
const childParentData = child.parentData!
assert(!childParentData.nextSiblingInChunk, 'child 不能已关联 nextSiblingInChunk')
assert(!childParentData.prevSiblingInChunk, 'child 不能已关联 prevSiblingInChunk')
assert(!childParentData.chunk, 'child 不能已分配 chunk')
childParentData.chunk = this
child.offstage = false
this._childCount++
assert(this._childCount > 0)
if (!after) {
// 从头部插入 (_firstChild)
childParentData.nextSiblingInChunk = this._firstChild
if (this._firstChild) {
const firstChildParentData = this._firstChild.parentData
assert(firstChildParentData)
firstChildParentData.prevSiblingInChunk = child
}
this._firstChild = child
this._lastChild ??= child
} else {
assert(this._firstChild)
assert(this._lastChild)
assert(this.debugUltimatePrevSiblingOf(after, this._firstChild))
assert(this.debugUltimateNextSiblingOf(after, this._lastChild))
const afterParentData = after.parentData!
if (!afterParentData.nextSiblingInChunk) {
// 从尾部插入 (_lastChild)
assert(after === this._lastChild)
childParentData.prevSiblingInChunk = after
afterParentData.nextSiblingInChunk = child
this._lastChild = child
} else {
// 从中间插入
childParentData.nextSiblingInChunk = afterParentData.nextSiblingInChunk
childParentData.prevSiblingInChunk = after
const childPrevSiblingParentData = childParentData.prevSiblingInChunk!.parentData!
const childNextSiblingParentData = childParentData.nextSiblingInChunk!.parentData!
childPrevSiblingParentData.nextSiblingInChunk = child
childNextSiblingParentData.prevSiblingInChunk = child
assert(afterParentData.nextSiblingInChunk === child)
}
}
this._layoutDirty = true
this._paintDirty = true
}