美文网首页
鸿蒙随笔

鸿蒙随笔

作者: _菩提本无树_ | 来源:发表于2024-06-02 18:39 被阅读0次

    @Entry装饰的自定义组件,其build()函数下的根节点唯一且必要,且必须为容器组件,其中ForEach禁止作为根节点。
    @Component装饰的自定义组件,其build()函数下的根节点唯一且必要,可以为非容器组件,其中ForEach禁止作为根节点。

    如果界面单纯作为子组件使用请不要使用@Entry修饰,@Entry装饰的自定义组件为页面的入口组件,即页面的根节点,一个页面有且仅能有一个@Entry。只有被@Entry装饰的组件才可以调用页面的生命周期。

    页面销毁优先销毁主组件,然后是子组件

    组件的销毁方式

    let show: boolean = true
    if (this.show) {
      // 创建子组件,如果中间修改了show的值为false那么子组件将会被销毁
      Child()
    }
    

    @Link的使用
    使用@Link修饰的内容,在任何位置修改,都会影响所有的值,父子组件也可以
    @State也可以但仅限于组件内,无法跨组件
    @Prop 是单向的,比如子组件使用了他,然后修改值,不会影响父组件,但是父组件使用了State(或其他指定的装饰符)修饰和他对应的值,会影响子组件

    使用@Builder修饰的自定义函数内的UI可以实现复用

    @Builder function overBuilder($$: { paramA1: string }) {
      Row() {
      // 注意下面用的是(`)不是(')
        Text(`UseStateVarByReference: ${$$.paramA1} `)
      }
    }
    

    按引用传值,相当于oc方法中的正常传值,按值传递相当于oc中传值对象copy一份,传递后的值和当前互不影响,建议使用引用传值,写法如下

    @State label: string = "label"
    @Builder function overBuilder($$: { paramA1: string }) {
      Row() {
        // 注意下面用的是(`)不是(')
        Text(`UseStateVarByReference: ${$$.paramA1} `)
      }
    }
    
    overBuilder({ paramA1: this.label })
    
    

    @Extend定义扩展组件样式,仅支持定义全局的,但仅限于当前文件使用,不支持export

    @Extend(Text) function fancy () {
      .fontColor(Color.Red)
    }
    

    相关文章

      网友评论

          本文标题:鸿蒙随笔

          本文链接:https://www.haomeiwen.com/subject/wnksqjtx.html