HarmonyOS鸿蒙Next中FrameNode的removeChild的child会走aboutToDisappear吗
HarmonyOS鸿蒙Next中FrameNode的removeChild的child会走aboutToDisappear吗 调用FrameNode的removeChild方法去移除子组件后子组件被移除了 但是没有走子组件的aboutToDisappear 怎么才能让子组件的aboutToDisappear触发
使用removeChild方法是可以走aboutToDisappear生命周期的,参考demo如下:
import { NodeController, FrameNode, BuilderNode } from '@kit.ArkUI';
@Component
struct TestComponent {
build() {
Column() {
Text('This is a BuilderNode.')
.fontSize(16)
.fontWeight(FontWeight.Bold)
}
.width('100%')
.backgroundColor(Color.Gray)
}
aboutToAppear() {
console.error('aboutToAppear');
}
aboutToDisappear() {
console.error('aboutToDisappear');
}
}
@Builder
function buildComponent() {
TestComponent()
}
class MyNodeController extends NodeController {
private rootNode: FrameNode | null = null;
private builderNode: BuilderNode<[]> | null = null;
makeNode(uiContext: UIContext): FrameNode | null {
this.rootNode = new FrameNode(uiContext);
this.builderNode = new BuilderNode(uiContext, { selfIdealSize: { width: 200, height: 100 } });
this.builderNode.build(new WrappedBuilder(buildComponent));
const rootRenderNode = this.rootNode.getRenderNode();
if (rootRenderNode !== null) {
rootRenderNode.size = { width: 200, height: 200 };
rootRenderNode.backgroundColor = 0xff00ff00;
rootRenderNode.appendChild(this.builderNode!.getFrameNode()!.getRenderNode());
}
return this.rootNode;
}
disposeFrameNode() {
if (this.rootNode !== null && this.builderNode !== null) {
this.rootNode.removeChild(this.builderNode.getFrameNode());
this.builderNode.dispose();
this.rootNode.dispose();
}
}
removeBuilderNode() {
const rootRenderNode = this.rootNode!.getRenderNode();
if (rootRenderNode !== null && this.builderNode !== null && this.builderNode.getFrameNode() !== null) {
rootRenderNode.removeChild(this.builderNode!.getFrameNode()!.getRenderNode());
}
}
}
@Entry
@Component
struct Index {
private myNodeController: MyNodeController = new MyNodeController();
build() {
Column({ space: 4 }) {
NodeContainer(this.myNodeController)
Button('FrameNode dispose')
.onClick(() => {
this.myNodeController.disposeFrameNode();
})
.width('100%')
}
}
}
更多关于HarmonyOS鸿蒙Next中FrameNode的removeChild的child会走aboutToDisappear吗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,当调用FrameNode的removeChild方法移除一个子节点时,被移除的子节点不会触发aboutToDisappear生命周期回调。aboutToDisappear通常用于页面或组件即将从视图中消失时的处理逻辑,而removeChild操作直接移除了子节点,不会触发该回调。如果需要处理子节点移除后的逻辑,可以在移除操作后手动执行相关代码。
在HarmonyOS鸿蒙Next中,当调用FrameNode的removeChild方法时,被移除的子节点不会自动触发aboutToDisappear生命周期回调。aboutToDisappear通常是在页面即将不可见时由系统调用的,而不是在节点被移除时触发。如果你需要在移除子节点时执行特定逻辑,建议在调用removeChild前后手动处理。

