首页 > 其他分享 >学习笔记(四):页面和自定义组件生命周期

学习笔记(四):页面和自定义组件生命周期

时间:2024-10-25 15:46:29浏览次数:1  
标签:生命周期 console 自定义 组件 Entry 页面

页面和组件的定义:

  • 自定义组件:@Component装饰的UI单元,可以组合多个系统组件实现UI的复用,可以调用组件的生命周期。
  • 页面:即应用的UI页面。可以由一个或者多个自定义组件组成,@Entry装饰的自定义组件为页面的入口组件,即页面的根节点,一个页面有且仅能有一个@Entry。只有被@Entry装饰的组件才可以调用页面的生命周期。

 

页面生命周期,即被@Entry装饰的组件生命周期,提供以下生命周期接口:

  • onPageShow:页面每次显示时触发一次,包括路由过程、应用进入前台等场景。
  • onPageHide:页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景。
  • onBackPress:当用户点击返回按钮时触发。

组件生命周期,即一般用@Component装饰的自定义组件的生命周期,提供以下生命周期接口:

  • aboutToAppear:组件即将出现时回调该接口,具体时机为在创建自定义组件的新实例后,在执行其build()函数之前执行。
  • aboutToDisappear:在自定义组件析构销毁之前执行。不允许在aboutToDisappear函数中改变状态变量,特别是@Link变量的修改可能会导致应用程序行为不稳定。

生命周期方法调用示例:

// 自定义文本组件
// 传入一个字符串,点击组件 字符串发生变化
@Component
export struct mText {
  @State message: string = 'Hello World'
  // 组件生命周期
  aboutToDisappear() {
    console.info('自定义组件生命周期方法 aboutToDisappear')
  }
  // 组件生命周期
  aboutToAppear() {
    console.info('自定义组件生命周期方法 aboutToAppear')
  }
  build() {
    Row() {
      Text(this.message)
        .fontSize(20)
        .fontColor(Color.Red)
        .onClick(()=>{
          this.message = "点击了一下"
        })
    }
  }
}


页面
import { mText } from './component/mText'
@Entry
@Component
struct Index {
  // 只有被@Entry装饰的组件才可以调用页面的生命周期
  onPageShow() {
    console.info('页面生命周期 onPageShow');
  }
  // 只有被@Entry装饰的组件才可以调用页面的生命周期
  onPageHide() {
    console.info('页面生命周期 onPageHide');
  }
  // 只有被@Entry装饰的组件才可以调用页面的生命周期
  onBackPress() {
    console.info('页面生命周期 onBackPress');
  }
  // 组件生命周期
  aboutToAppear() {
    console.info('页面-组件生命周期 aboutToAppear');
  }
  // 组件生命周期
  aboutToDisappear() {
    console.info('页面-组件生命周期 aboutToDisappear');
  }
  build() {
    Row() {
      Column() {
        mText({message: '第一个自定义组件' });
        Divider()
        mText({message: '第二个自定义组件'})
      }
      .width('100%')
    }
    .height('100%')
  }
}

 

app Log: 页面-组件生命周期 aboutToAppear
app Log: 自定义组件生命周期方法 aboutToAppear
app Log: 自定义组件生命周期方法 aboutToAppear
app Log: 页面生命周期 onPageShow

 

标签:生命周期,console,自定义,组件,Entry,页面
From: https://www.cnblogs.com/xqxacm/p/18502690

相关文章

  • 学习笔记(三):自定义组件
    自定义组件基于struct实现,1、struct:struct+自定义组件名+{...}的组合构成自定义组件,不能有继承关系。对于struct的实例化,可以省略new。2、@Component:@Component装饰器仅能装饰struct关键字声明的数据结构。struct被@Component装饰后具备组件化的能力,需要实现build方法描......
  • 构建更加丰富的页面 习题答案<HarmonyOS第一课>
    一、判断题1. Tabs组件可以通过接口传入一个TabsController,该TabsController可以控制Tabs组件进行页签切换。正确(True)错误(False)正确(True)回答正确2. WebviewController提供了变更Web组件显示内容的接口,例如可以使用loadData来加载一个网页链接地址改变Web组件的......
  • 从简单的页面开始<HarmonyOS第一课>
    一、判断题1. Button作为容器使用时可以通过添加子组件实现包含文字、图片等元素的按钮,其类型包括胶囊按钮、圆形按钮、普通按钮。正确(True)错误(False)正确(True)回答正确2. 对于包含文本元素的组件,如:Text、Span、Button、TextInput等,使用fontFamily设置字体时,参数......
  • 课程分享 | 物联网安全TOP10及安全开发生命周期
    什么是物联网?物联网(InternetofThings,简称IoT)是指通过互联网将各种设备、物体和系统连接起来,使它们能够收集数据、交换信息,并且在某些情况下可以自动执行任务的技术体系。这些“物”可以是任何带有传感器、软件和其他技术的实体,如家用电器、工业机械、车辆、医疗设备等。......
  • vue-cli 跳转到页面指定位置
    原文关注公众号,后台里留言可进行提问,可在后台留言向作者提问解答问题!https://mp.weixin.qq.com/s?__biz=Mzg3NTAzMzAxNA==&mid=2247484254&idx=1&sn=361bbb2113be3eeda3802f0a805c5705&chksm=cec6fb87f9b1729174e3ae66bf9693207386256c964499c098fb8a6cc14b4ba266bc271073a3&tok......
  • Docker部署及项目的生命周期
    目标了解传统项目生命周期的阶段特点了解新型项目生命周期的特点了解部署方案的一般流程1.项目生命周期​ 世间万物皆有其生命,软件项目也是如此。随着互联网的发展,软件项目的生命周期也发生了很大的变化,为了更好的让大家理解软件项目,项目生命周期有狭义(具体)、广义(缘起/缘......
  • 手机端H5页面适配PC端
    手机端H5页面适配PC端@mediaonlyscreenand(min-width:500px){page{width:375px;margin:0auto;/*解决元素position为fixed时,以屏幕视口为容器,从而导致该元素宽度为100%时铺满整个屏幕*/transform:perspective(1px);}}元素po......
  • 手机旋转的时候 activity会走什么生命周期?
    当手机旋转时,Activity的生命周期会受到影响,但具体行为取决于是否在AndroidManifest.xml文件中对Activity进行了特定的配置。以下是两种不同配置下的生命周期行为:未配置android:configChanges如果未在AndroidManifest.xml中为Activity配置android:configChanges属性,当手机......
  • 若依 自定义注解@Log,实现aop
    在一个controller的方法写了@Log,注解没有产生log,因为是匿名调用,LogAspect的handleLog出错了 src/main/java/com/ktg/framework/aspectj/LogAspect.java 17:46:26.628[http-nio-8085-exec-22]DEBUGc.k.m.l.m.L.deleteLbDetailByMatNo-[debug,137]-==>Preparing:del......
  • 页面404超时,nginx配置方案
    只需要更改子域名下的配置文件vhosts.conf 文件,设置php读取超时时间即可fastcgi_read_timeout300;location~\.php(.*)${fastcgi_pass127.0.0.1:9002;fastcgi_indexindex.php;fastcgi_split_path_info^((?U).+\.php)(......