鸿蒙-生命周期钩子
如何区分组件和页面
有@Entry的,就是页面。
没有的就是组件
生命周期

组件有生命周期钩子
onPageShow:每次显示时触发(路由过程、应用进入前台)
onPageHide:每次隐藏触发(路由过程、应用进入后台)
aboutToAppear:创建(页面/组件)实例后执行,可以修改状态变量。(组件/页面)
aboutToDisappear:销毁(页面/组件)实例前执行,不允许修改状态变量。(组件/页面)
onBackPress:点击返回触发(return true) 阻止返回键默认返回效果
组件有aboutToAppear和aboutToDisappear这2个生命周期钩子函数
aboutToAppear:创建(页面/组件)实例后执行,可以修改状态变量。(组件/页面)
aboutToDisappear:销毁(页面/组件)实例前执行,不允许修改状态变量。(组件/页面)
页面中有组件生命周期钩子执行顺序(先外后里)
现在我们给页面中有一个子组件,通过 show 这个变量来进行控制:是否显示。
在初始的时候,肯定是会执行页面中的 aboutToAppea 这个钩子
当 show 为true的时候,执行子组件的 aboutToAppea 这个钩子
当 show由true变为false的时候,执行子组件的 aboutToDisappear这个钩子
如果show始终是false,子组件就不会被创建出来 。就不会执行钩子函数(aboutToAppear)
@Component
struct Child {
aboutToAppear(): void {
console.log('子组件:创建组件实例后执行,可以修改状态变量')
}
aboutToDisappear(): void {
console.log('子组件:组件实例销毁前执行,不允许修改状态变量')
}
build() {
Row(){
Text('我是一个普通的子组件')
}
}
}
export default Child
import AChildA from '../components/Child'
@Entry
@Component
struct Login {
@State show:boolean = true
aboutToAppear(): void {
console.log('页面:创建组件实例后执行,可以修改状态变量')
}
aboutToDisappear(): void {
console.log('页面:组件实例销毁前执行,不允许修改状态变量')
}
build() {
Column(){
Text('组件的生命周期')
Button('是否显示组件').onClick(()=>{
this.show = !this.show
})
if(this.show){
AChildA()
}
}
}
}

总结:先执行外层在执行里层的钩子
页面初始化时会执行哪些钩子(刷新当前页面)
父页面的:aboutToAppear == 》 子组件的aboutToAppear ==》 父页面的 onPageShow

使用 pushUrl 由A页面跳转到B页面会执行哪些钩子函数
B页面的:aboutToAppear ==》 A页面的:onPageHide ===》B页面的:onPageShow

如果从B页面返回A页面会执行哪些钩子
B页面的:onBackPress===》 B页面的:onPageHide ===》 A页面的:onPageShow ==》 B页面的:aboutToDisappear

遇见问题,这是你成长的机会,如果你能够解决,这就是收获。
出处:https://www.cnblogs.com/IwishIcould/
想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,或者关注博主,在此感谢!
万水千山总是情,打赏5毛买辣条行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主(っ•̀ω•́)っ✎⁾⁾!
想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!
如果文中有什么错误,欢迎指出。以免更多的人被误导。

浙公网安备 33010602011771号