赞
踩
学习HarmonyOS也有一段时间了,发现了一些问题,也有一些体会,写在这里, 也是对自己近期的一个学习体会的总结。因为我之前是学Java的,没有安卓的相关开发经验,只有玩过一段时间的微信小程序,所以以下内容,如有错误,敬请指正。
学习HarmonyOS最大的一个问题就是目前手头上没有合适的华为手机,借了一个Nova5Pro,结果当时不能升级到3.0系统,后面升级到了3.0系统之后,API版本还是6,导致一直都没有真机做测试,使用模拟器和预览器也勉强够用,不过学习过程中也有遇到一些Bug,后面再说
第二个问题就是HarmonyOS的版本跟API的版本,个人感觉有点混乱,因为你手上拿着一个设备,你是完全不知道它支持的API版本是多少,此处强烈建议华为的人想办法解决一下这个问题,有一个最简单的方式就是直接把API版本写在手机的开发者模式,这样进去就知道当前手机的API版本,这样不是比较简单吗?
感觉官方文档对于初学者来说并不是很友好,学习路线并不线性,官方文档表示,后期鸿蒙开发的主力肯定是ArkaTS+Storg模型,所以我选择直接先从API8入手,学习ArkTS,但是发现,对于ArkTS的学习,我个人之前只学过JS,对于TS的语法很多时候看到的时候一脸懵逼,但是官方文档对于这块内容好像默认你都会似的,也没写,只能自己去查,去摸索,增加了我的学习成本。
CodeLabs的形式非常好,有用的内容也不少,但是一开始,我随便打开一个CodeLabs也是一脸懵逼的,为什么这么多文件,为什么这么多引用,对于初学者而言,不是应该简单点好理解一些比较好吗,但是CodeLabs目前的形式,个人感觉有点吓到我,并且对于CodeLabs的引导,给我一种,“我们来学习,这是1,这是2,这是3,1+1=2,1+2=3,你学会了吗?好了现在我们来造航母吧!”我个人感觉非常难受。不知道其他人会不会跟我有同样感觉。
吐槽就先吐槽到这里,接下来对目前学习的一个内容进行一个总结。
对于这块内容,我是站在一个新手的角度得出的内容,如有不对的内容,请指正
基础:
了解:
熟悉:
重要
变量声明
name:type = value
复制
联合类型
src: string | PixelMap | Resource
复制
数组类型
- let numberArray: number[] = [1, 2, 3] // var numberArray = [1, 2, 3];
- let numberArray1: Array<number> = [4, 5, 6] // var numberArray1 = [4, 5, 6];
复制
let arr: (string | number)[] = [1, 'a']
复制
- let arr: {name: string, age: number}[] = [
- {name: 'Jane', age: 17},
- {name: 'Jian', age: 20}
- ]
复制
元组
元组算是一个新东西,Python也有用到,本质上就是一个确定数量和类型的数组
类型和位置需要一一对应
let data: [number, string, boolean] = [2, '3', true] // var data = [2, '3', true];
复制
枚举
- enum Direction {
- Up = 1, // 不赋值默认从0开始
- Down,
- Left,
- Right
- }
-
- console.log(Direction.Down) // 2
- console.log(Direction[1]) // Up
复制
类型断言
- str as string
-
- <string>str //这两种方式都是将变量str,强制变成string类型
复制
类型别名
- type Lady = {name: string, age: number} // 对象类型可以使用类型别名
- let arr: Lady[] = [
- {name: 'Jane', age: 17},
- {name: 'Jian', age: 20}
- ]
复制
接口提供一种数据结构的抽象定义,跟Java的会有所区别,不仅有方法的定义也有属性的定义,定义完了他就是一种数据结构
- interface MyInterface {
- name: string,
- age: number,
-
- say(): string
- }
-
- function fn(opts: MyInterface) {
- //...
- }
-
- fn({
- name:"张三",
- age:18,
- say(){
- return "哈哈哈"
- }
- })
复制
接口的实现与继承
属性声明
构造函数关键字
静态成员
存取器
抽象类
函数类型
在TS中,函数有两种类型,一种是函数声明,其实就是先定义函数,然后用到的时候,使用函数名调用
另一种类似于Java的匿名函数,用到的时候直接使用function关键字创建一个函数
函数的返回值跟属性的返回值一样,需要使用“:返回类型”
- //函数声明
- function sum(x: number, y: string): string {
- return x + y
- }
-
- //函数表达式 这种情况,sum的类型是ts自动推断得出的string类型
- let sum = function (x: number, y: string): string {
- return x + y
- }
复制
- let sum:(x:number,y:string)=>string
- //属性sum为一个函数,函数形参为(x:number,y:string),返回值为string
复制
- (形参)=>{
- 运算逻辑
- }
复制
可选参数
当在组件或者函数中,某些参数可传可不传,就可以用到可选参数,使用方式如下,
注意,如果一个函数中同时有必选参数和可选参数,可选参数一定要在后面
- add(num?:number){
-
- }
复制
默认参数
- add(num:number=3){
-
- }
复制
剩余参数
- function sum(x: number, ...rest: string[]): string[] {
- return rest.map(i => i + x)
- }
复制
函数重载
- function fn(x: number, y: number): number
- function fn(x: string, y: string): string
- function fn(x: string|number, y: string|number): string|number{
- if(typeof x === 'number' && typeof y === 'number') {
- return x + y
- } else if(typeof x === 'string' && typeof y === 'string') {
- return x + '_' + y
- } else {
- return '错误'
- }
- }
-
- // 如果没有前两个重载这里不会报错,输出内容是“错误”
- // 如果有了前两个重载这里就会报错,因为此时的参数不符合重载函数的任何一种传参数据类型
- fn(10, 'kkk')
复制
泛型函数
泛型接口
泛型类
UI组件
无参数构造组件
有参数构造组件
- 组件名(参数){
- 子组件
- }
复制
属性方法
事件方法
子组件配置
带@ 就是装饰器,如@State、@Entry
组件定义装饰器
@Component
@Entry
@Rreview
动态构建装饰器
@Builder
@Styles
@Extend
@CustonDialog
状态管理装饰器
@State
@Prop
@Link
这个装饰器算是增强版的@Prop,因为它可以让父组件中的@State变量跟子组件中@Link修饰的变量联动起来,当任一一方对变量进行修改时,会同步到另一方。
值类型必须相同,不能在组件内部初始化,必须接收父组件的@State变量初始化
使用时需要使用$关键字,
- 子组件变量:$父组件变量
- 如text:$text
复制
@Watch
这个装饰器用来监视某一个状态变量的变化,当发生变化时,就会调用该装饰器注册的函数
使用方式为:
- // @State @Watch("函数名") 变量名:变量类型= 初始值
-
- @State @Watch("add") num:number = 0
- //当num每一次发生变化时,就执行一次Add函数
- add(){
- this.xxx+=1
- }
复制
@Consume和@Provide
@Provide为数据的提供方,可以讲数据同步给其他被@Consume修饰的变量,但是前提是,变量名需要一样
@Consume为数据的接收方,本身不可以自行初始化变量,当感知到@Provide数据的更新时,会触发当前组件的重新渲染。
在使用@Provide和@Consume时,要避免循环引用导致死循环。
if/else
ForEach
LazyForEach
滑动选择器
TextClock
下拉选择菜单
评分条
滑动条
进度条
二维码
搜索框
分割器
图表
Video
完成以上内容的学习时,可以尝试完成测试
aboutToAppear
onPageShow
onBackPress
onPageHide
aboutToDisappear
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。