ts-custom-component-lifecycle-callbacks.md 2.5 KB
Newer Older
Z
zengyawen 已提交
1
# 自定义组件生命周期回调函数
Z
zengyawen 已提交
2 3 4 5

自定义组件的生命周期回调函数用于通知用户该自定义组件的生命周期,这些回调函数是私有的,在运行时由开发框架在特定的时间进行调用,不能从应用程序中手动调用这些回调函数。


Z
zengyawen 已提交
6
## 生命周期回调函数定义
Z
zengyawen 已提交
7

T
fourth  
tianyu 已提交
8 9
| 函数名           | 描述                                                         |
| ---------------- | ------------------------------------------------------------ |
H
HelloCrease 已提交
10
| aboutToAppear    | 函数在创建自定义组件的新实例后,在执行其build函数之前执行。允许在aboutToAppear函数中改变状态变量,更改将在后续执行build函数中生效。 |
T
fourth  
tianyu 已提交
11
| aboutToDisappear | 函数在自定义组件析构销毁之前执行。不允许在aboutToDisappear函数中改变状态变量,特别是@Link变量的修改可能会导致应用程序行为不稳定。 |
T
tianyu 已提交
12 13
| onPageShow       | 页面每次显示时触发一次,包括路由过程、应用进入前后台等场景,仅@Entry修饰的自定义组件生效。 |
| onPageHide       | 页面每次隐藏时触发一次,包括路由过程、应用进入前后台等场景,仅@Entry修饰的自定义组件生效。 |
H
HelloCrease 已提交
14
| onBackPress      | 当用户点击返回按钮时触发,仅\@Entry修饰的自定义组件生效。<br/>-&nbsp;返回true表示页面自己处理返回逻辑,&nbsp;不进行页面路由。<br/>-&nbsp;返回false表示使用默认的返回逻辑。<br/>-&nbsp;不返回值会作为false处理。 |
Z
zengyawen 已提交
15 16 17


## 示例
Z
zengyawen 已提交
18

H
HelloCrease 已提交
19 20
```ts
// xxx.ets
21
@Entry
Z
zengyawen 已提交
22 23 24 25 26
@Component
struct CountDownTimerComponent {
    @State countDownFrom: number = 10
    private timerId: number = -1

J
jiangbo 已提交
27
    aboutToAppear(): void  {
Z
zengyawen 已提交
28 29 30 31 32 33 34 35
        this.timerId = setInterval(() => {
            if (this.countDownFrom <= 1) {
                clearTimeout(this.timerId)
            }
            this.countDownFrom -= 1
        }, 1000) // decr counter by 1 every second
    }

J
jiangbo 已提交
36
    aboutToDisappear(): void {
Z
zengyawen 已提交
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
        if (this.timerId > 0) {
            clearTimeout(this.timerId)
            this.timerId = -1
        }
    }

    build() {
        Text(`${this.countDownFrom} sec left`)
    }
}
```

上述示例表明,生命周期函数对于允许CountDownTimerComponent管理其计时器资源至关重要,类似的函数也包括异步从网络请求加载资源。


H
HelloCrease 已提交
52
> **说明:**
53
> - 允许在生命周期函数中使用Promise和异步回调函数,比如网络资源获取,定时器设置等;
H
HelloCrease 已提交
54
>
55
> - 不允许在生命周期函数中使用async await。