自学内容网 自学内容网

#HarmonyOs篇: 管理应用拥有的状态LocalStorage AppStorage

调测调优

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/system-debug-optimize-V5

hilog 日志

import { hilog } from ‘@kit.PerformanceAnalysisKit’;

hilog.info(0xFF00, “testTag”, “%{public}s World %{public}d”, “hello”, 3);

管理应用拥有的状态

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-application-state-management-V5

LocalStorage页面级UI状态存储

@LocalStorageProp这个与LocalStorage给定变量形成单向同步关系

@LocalStotageLink这个与LocalStorage给定变量形成单向双向关系

SubscribedAbstractProperty是HarmonyOs的一个核心工具

支持与 AppStorage 或 LocalStorage 中的属性建立单向或双向绑定。

AppStorage应用全局的UI状态存储

@StorageProp单向

@StorageLink双向

管理组件拥有的状态

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-component-state-management-V5

@State 组件内状态

@Prop 父子单向同步

@Link 父子双向同步

@Provide @Consume后代组件同步

@Component
struct Child {
  @Consume num: number;

  build() {
    Column() {
      Text(`num的值: ${this.num}`)
    }
  }
}

@Entry
@Component
struct Parent {
  // 正确写法
  @Provide num: number = 10;

  build() {
    Column() {
      Text(`num的值: ${this.num}`)
      Child()
    }
  }
}

== @Provide和@Consume,应用于与后代组件的双向数据同步,应用于状态数据在多个层级之间传递的场景。==双向同步的示例

@Component
struct ToDoItem {
  // @Consume装饰的变量通过相同的属性名绑定其祖先组件ToDo内的@Provide装饰的变量
  @Consume count: number;

  build() {
    Column() {
      Text(`count(${this.count})`)
      Button(`count(${this.count}), count + 1`)
        .onClick(() => this.count += 1)
    }
    .width('50%')
  }
}

@Component
struct ToDoList {
  build() {
    Row({ space: 5 }) {
      ToDoItem()
      ToDoItem()
    }
  }
}

@Component
struct ToDoDemo {
  build() {
    ToDoList()
  }
}

@Entry
@Component
struct ToDo {
  // @Provide装饰的变量index由入口组件ToDo提供其后代组件
  @Provide count: number = 0;

  build() {
    Column() {
      Button(`count(${this.count}), count + 1`)
        .onClick(() => this.count += 1)
      ToDoDemo()
    }
  }
}

@Observed @ObjectLink 深层次同步

自定义组件

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-builder-V5

@Builder—自定义构造函数

@LocalBuilder—维持组件父子关系

class ReferenceType {
  paramString: string = '';
}

@Component
struct HelloComponent {
  @Prop message: string;

  build() {
    Row() {
      Text(`HelloComponent===${this.message}`);
    }
  }
}

@Entry
@Component
struct Parent {
  @State variableValue: string = 'Hello World';

  @LocalBuilder
  citeLocalBuilder($$: ReferenceType) {
    Row() {
      Column() {
        Text(`citeLocalBuilder===${$$.paramString}`);
        HelloComponent({ message: $$.paramString });
      }
    }
  }

  build() {
    Column() {
      this.citeLocalBuilder({ paramString: this.variableValue });
      Button('Click me').onClick(() => {
        this.variableValue = 'Hi World';
      })
    }
  }
}

子组件引用父组件的@LocalBuilder函数,传入的参数为状态变量,状态变量的改变不会引发@LocalBuilder方法内的UI刷新,原因是@Localbuilder装饰的函数绑定在父组件上,状态变量刷新机制是刷新本组件以及其子组件,对父组件无影响,故无法引发刷新。若使用@Builder修饰则可引发刷新,原因是@Builder改变了函数的this指向,此时函数被绑定到子组件上,故能引发UI刷新。

@BuilderParam

@BuilderParam装饰的方法只能被自定义构建函数(@Builder装饰的方法)初始化。

@Component
struct Child {
  @Builder customBuilder() {};
  @BuilderParam customBuilderParam: () => void = this.customBuilder;

  build() {
    Column() {
      this.customBuilderParam()
    }
  }
}

@Entry
@Component
struct Parent {
  @Builder componentBuilder() {
    Text(`Parent builder `)
  }

  build() {
    Column() {
      Child({ customBuilderParam: this.componentBuilder })
    }
  }
}

@Styles—定义组件重用样式

// 全局
@Styles function functionName() { ... }

// 在组件内
@Component
struct FancyUse {
  @Styles fancy() {
    .height(100)
  }
}

@Extend—定义扩展组件的样式

和@Styles不同,@Extend支持封装指定组件的私有属性、私有事件和自身定义的全局方法。

// @Extend(Text)可以支持Text的私有属性fontColor
@Extend(Text) function fancy () {
  .fontColor(Color.Red)
}
// superFancyText可以调用预定义的fancy
@Extend(Text) function superFancyText(size:number) {
    .fontSize(size)
    .fancy()
}

@Extend,用于扩展原生组件样式。

@stateStyles—多态样式

focused:获焦态。

normal:正常态。

pressed:按压态。

disabled:不可用态。

selected10+:选中态

@Entry
@Component
struct StateStylesSample {
  build() {
    Column() {
      Button('Button1')
        .stateStyles({
          focused: {
            .backgroundColor('#ffffeef0')
          },
          pressed: {
            .backgroundColor('#ff707070')
          },
          normal: {
            .backgroundColor('#ff2787d9')
          }
        })
        .margin(20)
      Button('Button2')
        .stateStyles({
          focused: {
            .backgroundColor('#ffffeef0')
          },
          pressed: {
            .backgroundColor('#ff707070')
          },
          normal: {
            .backgroundColor('#ff2787d9')
          }
        })
    }.margin('30%')
  }
}

@Require—校验构造传参

$$语法 内置组件双向同步

$$运算符为系统内置组件提供TS变量的引用,使得TS变量和系统内置组件的内部状态保持同步。

组件导航Navigation

pageTransition页面间转场

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/ts-page-transition-animation-V13#pagetransitionoptions%E5%AF%B9%E8%B1%A1%E8%AF%B4%E6%98%8E

PageTransitionEnter当页面自定义入场动效

PageTransitionExit当页面自定义出场动效

@ohos.promptAction (弹窗)

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/js-apis-promptaction-V13

import { promptAction } from '@kit.ArkUI';

promptAction.showToast
showToast(options: ShowToastOptions): void

创建并显示文本提示框。

Blank

空白填充组件----具有自动填充剩余部分的能力。

UIAbility里面的生命周期介绍

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/js-apis-app-ability-uiability-V13#uiabilityonforeground

onCreate–UIAbility实例处于完全关闭状态下被创建完成后进入该生命周期回调,执行初始化业务逻辑操作.

onWindowStageCreate–

router.pushUrl

目录在 应用框架—ArkUI—ArkTS API—UI界面

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-router-V5#routerpushurl9


原文地址:https://blog.csdn.net/weixin_47075554/article/details/145286336

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!