鸿蒙 ArkTs初识

前提:基于官网3.1/4.0文档。参考官网文档
基于Android开发体系来进行比较和思考。(或有偏颇,自行斟酌)

吐槽:官网上的案例只有代码和文档解释,没有可以直接运行查看效果的模拟器,这一点上,Jetpack Compose是有的。

基本语法

1.结构

在这里插入图片描述
上面是官网上面的图,从结构来看,类似Jetpack Compose。 通过注解的方式来定义组件,这里给命名为了“装饰器”。
需要注意的是:@State表示组件中的状态变量,状态变量变化会触发UI刷新。类比livedata

2.引用的方式

// $r形式引入应用资源,可应用于多语言场景
Text($r('app.string.title_value'))
Image(this.imagePath)
Image('https://' + this.imageUrl)
Text(`count: ${
     
     this.count}`)// 这种方式在react中较为常见,应该是ts的写法

引用本地资源的方式是$r('app.string.title_value')。(感觉稍显复杂了)

3.this作用域

fn = () => {
   
   
  console.info(`counter: ${
     
     this.counter}`)
  this.counter++
}
Button('add counter')
  .onClick(this.fn)

可以看到,this作用域是整个文件,而不是Android中的闭包作用域。

4.组件

@Component
struct MyComponent {
   
   
 build() {
   
   
 }
}

自定义组件标准范式如上。加上注解@Entry装饰的自定义组件将作为UI页面的入口。(这句话比较难理解,可以认为是export之类的用法,一个文件只有一个export,React项目中的特点。)

@Entry可以接受一个可选的LocalStorage的参数。——>这点类似于Android中的bundle,用来进行UI页面的数据传递。不确定该LocalStorage是否是livedata特点。

build
//不能在build里声明变量,需要放在build外。
build() {
   
   
  // 反例:不允许声明本地变量
  let a: number = 1;
}

//不允许在UI描述里直接使用console.info,但允许在方法或者函数里使用——>可以理解为build{}是渲染作用域,不要添加打印
build() {
   
   
  // 反例:不允许console.info
  console.info('print debug log');
}

//不允许创建本地的作用域——>既然是渲染作用域,那就不必要再添加作用域,直接堆砌组件即可。(组件作用域里面可以调用方法)
build() {
   
   
  // 反例:不允许本地作用域
  {
   
   
    ...
  }
}

不允许switch语法,如果需要使用条件判断,请使用if——>这一点甚是奇怪,都是判断语句还做不一样的差异对待

build() {
   
   
  Column() {
   
   
    // 反例:不允许使用switch语法
    switch (expression) {
   
   
      case 1:
        Text('...')
        break;
      case 2:
        Image('...')
        break;
      default:
        Text('...')
        break;
    }
  }
}
build() {
   
   
  Column() {
   
   
    // 反例:不允许使用表达式——>实际上这种写法在React中很常见,不确定知道jetpack compose是否如此设计
    (this.aVar > 10) ? Text('...') : Image('...')
  }
}
生命周期在这里插入图片描述

页面生命周期,即被@Entry装饰的组件生命周期,提供以下生命周期接口:
onPageShow:页面每次显示时触发一次,包括路由过程、应用进入前台等场景,仅@Entry装饰的自定义组件生效。
onPageHide:页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景,仅@Entry装饰的自定义组件生效。
onBackPress:当用户点击返回按钮时触发,仅@Entry装饰的自定义组件生效。

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

生命周期相较于Android是做了减法。不确定是否有页面栈的设计模式,譬如说:栈顶复用之类,以及由此进行的bundle数据传递。

组件的销毁

组件的销毁是从组件树上直接摘下子树,所以先调用父组件的aboutToDisappear,再调用子组件的aboutToDisappear,然后执行初始化新页面的生命周期流程。

以下是官方示例:

// Index.ets
import router from
### ArkTS 开发鸿蒙OS应用教程 #### 3.1 初识ArkTS语言 ArKTS是一种专为HarmonyOS设计的编程语言,旨在帮助开发者更高效地创建跨设备的应用程序[^1]。为了方便具有Web前端开发背景的人士迅速适应,HarmonyOS引入了一种类似于JavaScript的开发模式——即“兼容JS的类Web开发范式”,允许使用HTML/CSS/JS风格编写用户界面(UI)[^2]。 #### 3.2 创建第一个ArkTS项目 要启动一个新的ArkTS工程,可以通过DevEco Studio集成环境完成初始化设置过程。安装完成后,在新建项目的向导里选择支持ArkTS的语言选项即可开始配置工作空间。 #### 3.3 UI布局定义 采用声明式的模板语法来描述页面结构;利用CSS样式的子集自定义组件外观;借助于TypeScript实现业务逻辑处理。下面给出一段简单的例子展示如何组合这些要素: ```html <!-- index.html --> <div class="container"> <text>{{ message }}</text> </div> ``` ```css /* style.css */ .container { padding: 16px; } .text { font-size: 20px; color: blue; } ``` ```typescript // main.ts export default { data() { return { message: 'Hello HarmonyOS!' } }, onInit() { console.log('Application initialized'); } }; ``` 此段代码片段展示了基本的文字显示功能,其中`{{message}}`表示绑定的数据字段会动态反映到视图层面上。 #### 3.4 数据驱动视图更新机制 得益于双向数据绑定特性,当模型中的属性发生变化时,关联的DOM节点也会自动同步刷新,反之亦然。这大大简化了状态管理流程,提高了编码效率的同时也增强了用户体验的一致性和流畅度。 #### 3.5 后端交互实践 对于需要访问远程服务器的情况,可以考虑基于Node.js搭建RESTful API服务并与MongoDB数据库对接存储数据。由于ArkTS本身并不直接提供此类能力,因此通常会在客户端发起HTTP请求调用API接口获取所需资源[^3]。 ```javascript async function fetchData(url) { try { let response = await fetch(url); if (!response.ok) throw new Error(`Network response was not ok ${response.statusText}`); const result = await response.json(); return result; } catch (error) { console.error('Fetch error:', error); } } ``` 上述函数演示了一个异步加载网络数据的方法,适用于从后端拉取JSON格式的信息集合。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ganshenml

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值