HarmonyOS-ArkTS开发指南:从基础到实战

目录

一、基础语法

二、声明式 UI 开发

基本组件结构

三、状态管理

四、生命周期钩子

五、组件化开发

1. 创建自定义组件

2. 组件嵌套

六、事件处理

七、布局系统

八、样式设置

九、条件渲染与列表渲染

十、异步操作

十一、路由导航

开发建议

一、基础语法

ArkTS 是 TypeScript 的超集,所以支持所有 TypeScript 的特性,包括:

  1. 类型注解

    let name: string = "张三";
    let age: number = 25;
    let isStudent: boolean = true;
    
  2. 接口

    interface Student {id: number;name: string;score?: number;  // 可选属性
    }
    
  3. class Animal {constructor(public name: string) {}move(distance: number = 0) {console.log(`${this.name} moved ${distance}m.`);}
    }
    
  4. 函数

    function greet(name: string): string {return `Hello, ${name}!`;
    }
    

二、声明式 UI 开发

ArkTS 采用声明式语法构建 UI,类似于 React 和 Vue 的 JSX。

基本组件结构

@Entry  // 应用入口组件
@Component  // 声明为自定义组件
struct MyComponent {@State count: number = 0;  // 响应式状态build() {  // 构建UI的方法Column() {  // 垂直布局容器Text(`Count: ${this.count}`).fontSize(30)Button('Increment').onClick(() => {this.count++;  // 状态变化会自动更新UI})}.width('100%').height('100%')}
}

三、状态管理

ArkTS 提供多种状态管理方式:

  1. @State - 组件内部状态

    @State private isActive: boolean = false;
    
  2. @Link - 父子组件双向绑定

    // 父组件
    @State parentValue: string = "初始值";// 子组件
    @Link childValue: string;
    
  3. @Provide/@Consume - 跨组件状态共享

    // 提供者
    @Provide theme: string = "dark";// 消费者
    @Consume theme: string;
    

四、生命周期钩子

ArkTS 组件生命周期:

@Component
struct LifecycleDemo {aboutToAppear() {  // 组件即将显示console.log('组件即将挂载');}aboutToDisappear() {  // 组件即将销毁console.log('组件即将卸载');}onPageShow() {  // 页面显示console.log('页面显示');}onPageHide() {  // 页面隐藏console.log('页面隐藏');}
}

五、组件化开发

1. 创建自定义组件

@Component
struct CustomButton {@Prop label: string = "按钮";@State isPressed: boolean = false;build() {Button(this.label).stateEffect(this.isPressed).onClick(() => {this.isPressed = !this.isPressed;})}
}

2. 组件嵌套

@Component
struct Card {@Prop header: string;@Prop content: string;build() {Column() {Text(this.header).fontSize(20)Divider()Text(this.content)}.borderRadius(10).padding(15)}
}

六、事件处理

ArkTS 支持多种事件类型:

Button('交互按钮').onClick(() => {})  // 点击.onLongPress(() => {})  // 长按.onTouch(() => {})  // 触摸TextInput().onChange((value: string) => {})  // 输入变化Swiper().onChange((index: number) => {})  // 滑动变化

七、布局系统

ArkTS 提供丰富的布局容器:

  1. Flex 布局

    Flex({ direction: FlexDirection.Row, justifyContent: FlexAlign.SpaceBetween }) {Text('Item1')Text('Item2')
    }
    
  2. Grid 布局

    Grid() {ForEach([1,2,3,4], (item) => {Text(`Item${item}`)})
    }
    .columnsTemplate("1fr 1fr")
    
  3. Stack 布局

    Stack() {Image('background.jpg')Text('水印')
    }
    

八、样式设置

ArkTS 提供链式调用的样式API:

Text('样式示例').fontSize(16).fontColor(Color.White).backgroundColor('#007DFF').borderRadius(8).padding(10).margin({ top: 5, bottom: 5 }).width('90%').height(40)

九、条件渲染与列表渲染

  1. 条件渲染

    @State showDetails: boolean = false;build() {Column() {if (this.showDetails) {Text('详细信息')}}
    }
    
  2. 列表渲染

    @State items: string[] = ['Apple', 'Banana', 'Orange'];List() {ForEach(this.items, (item, index) => {ListItem() {Text(item)}})
    }
    

十、异步操作

ArkTS 支持现代异步编程方式:

async fetchData() {try {const response = await fetch('https://api.example.com/data');const data = await response.json();this.dataList = data;} catch (error) {console.error('请求失败:', error);}
}

十一、路由导航

ArkTS 提供完整的路由系统:

// 导航到新页面
router.pushUrl({url: 'pages/Detail',params: { id: 123 }
});// 接收参数
aboutToAppear() {const params = router.getParams();this.id = params['id'];
}// 路由返回
router.back();

开发建议

  1. 使用 DevEco Studio 进行开发
  2. 参考官方文档: HarmonyOS开发者官网
  3. 从简单示例开始,逐步构建复杂应用
  4. 合理使用状态管理,避免过度嵌套
  5. 注意性能优化,特别是列表渲染场景

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/87875.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/87875.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法-Day04

今天还是给大家分享几道题目,希望大家可以好好理解。 第一题 问题描述 小蓝有一天误入了一个混境之地。 好消息是:他误打误撞拿到了一张地图,并从中获取到以下信息: 混境之地是一个 n⋅m大小的矩阵,这个地图中一共…

Git版本控制详细资料

Git安装基本配置 下载安装(一路next) 打开bash终端(git专用) 命令: git -v(查看版本号) 配置: 用户名和邮箱,应用在每次提交代码版本时表明自己身份 命令: git config --global user.name "FT" git config --global user.email "F…

利用井云平台把Coze工作流接入小程序/网站封装变现 | 详细步骤→

今天来看看怎么把Coze工作流接入井云生成你的专属网站/小程序! 当前已支持三大模块接入:✅ 工作流 ✅ 智能体 ✅ 外部网页 本文所用工具 1、扣子:www.coze.cn 2、井云智能体:jingyun.center 为什么选择井云平台? …

linux weston flutter remote desktop

参考:Outputs — weston 14.0.90 documentation Weston 14.0: DRM-backend, color management, and output mirroring Weston 14.0: DRM-backend, color management, and output mirroring 🖥️ 3. DRM 输出可镜像至远程输出(RDP、VNC、PipeWire) 这次更新还带来了一个…

GitHub Copilot 是什么,怎么使用

GitHub Copilot 是一个由 GitHub 和 OpenAI 联合开发的 AI 编程助手,它可以在你写代码的时候自动给出建议、补全代码,甚至生成整个函数或算法。它就像一个“聪明的副驾驶”,时刻在你旁边协助你写代码。 简单解释: GitHub Copilot …

Android系统及应用QUIC协议支持详解

QUIC协议在Android中的全面支持与实践指南 本文深入探讨QUIC协议在Android中的实现细节,涵盖基础原理、开发技巧、性能优化及前沿扩展,提供完整的Kotlin代码示例和工程实践指南。 1. QUIC协议核心优势 QUIC(Quick UDP Internet Connections&…

.NET基于类名约定的自动依赖注入完整指南

🚀 .NET基于类名约定的自动依赖注入完整指南 基于类名约定的自动依赖注入可大幅减少手动注册服务的工作量,本文将通过清晰的结构、美观的排版和丰富的示例,帮助你快速掌握这一实用技术。 🌈 核心特性概览 特性说明类名约定自动…

Redis各数据结构的详细使用和使用场景

Redis各数据结构的详细使用 大家好!今天我们来聊聊Redis这个强大的内存数据库。就像我们生活中的工具箱一样,Redis提供了多种"工具"(数据结构)来帮助我们解决不同的问题。有些工具像螺丝刀(字符串&#xff…

MSYS2 环境下 Python 开发配置(结合 PyCharm)使用笔记

【笔记】MSYS2 的 MinGW64 环境中正确安装 Python 相关环境管理工具 (Poetry、Virtualenv、Pipenv 和 UV)-CSDN博客 MSYS2 环境配置与 Python 项目依赖管理笔记_msys更新python-CSDN博客 【技术笔记】MSYS2 指定 Python 版本安装方案_pacman -u 安装指定…

Python爬虫实战:研究Splinter相关技术

1. 引言 1.1 研究背景与意义 随着 Web 2.0 技术的发展,现代网页越来越多地采用 JavaScript 动态生成内容。传统爬虫通过直接请求 HTML 页面的方式,无法获取这些动态渲染的内容,导致爬取数据不完整。据统计,全球前 1000 名网站中,超过 70% 的页面包含动态加载内容 。Spli…

大气商务工作汇报总结PPT模版分享

蓝色商务工作总结PPT模版,莫兰迪工作总结PPT模版,年中工作汇报PPT模版,简约工作汇报PPT模版,上半年工作总结PPT模版,极简工作汇报PPT模版,欧美简约PPT模版,大气商务通用PPT模版,团队…

5G modem开发

链接文章:https://zhuanlan.zhihu.com/p/709130546 OpenHarmony RIL架构 链接文章:https://blog.csdn.net/weixin_42571280/article/details/148566029 在移动通信设备中,无线接口层(Radio Interface Layer,简称RIL&…

Gartner《AI-Driven Methods for Cost-Efficiency》学习心得

一、背景介绍 在当前经济形势下,企业面临着成本上升与收入增长放缓的双重压力。Gartner 的这份报告指出,大多数企业对 AI 的投资主要集中在提升用户生产力方面,但短期内投资回报率有限。鉴于经济的不确定性以及成本压力,尤其是生成式 AI(GenAI)技术,若应用于财务效率和…

人脸识别技术是自动化还是智能化?

人脸识别技术兼具自动化与智能化的双重特性。它通过自动采集图像、预处理图像、提取特征以及进行识别比对等操作,实现了高效且无需人工干预的识别流程,展现出强大的自动化能力。同时,它还具备自适应学习能力,能够根据新的数据和场…

树结构的实际应用之堆排序

树结构的实际应用之堆排序 基本介绍 堆排序是利用堆这种数据结构设计而成的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度为O(logn),它也是不稳定排序。堆是具有以下性质的完全二叉树:…

用OBS Studio录制WAV音频,玩转语音克隆和文本转语音!

言简意赅的讲解OBS Studio解决的痛点 随着AI技术的快速发展,语音克隆与文本生成语音技术越来越受欢迎。无论你想要制作个人虚拟主播,还是给自媒体视频配音,拥有高质量的原始音频都是关键。本文详细教你使用免费且功能强大的软件——OBS Stud…

LangChain-5-agent

概述 Agent 是一种能够基于接收到的输入,利用自身的决策逻辑和可用的工具,动态地规划并执行一系列操作,以达成特定任务的程序或系统。它在与外界交互过程中,会根据实时情况灵活调整策略,而不是按照固定的预设流程执行…

操作系统进程与线程核心知识全览

本博客,根据王道所学。以下为第二章节知识点: 进程的概念、组成、状态与其转换、进程间通信、信号; 单/多线程模型、线程管理、调度时机的切换、调度的目标、调度算法、多处理机调度; 同步与互斥、进程互斥的软硬件实现方法、信号…

C++中类型转换操作符知识介绍

文章目录 **一、类型转换操作符的语法与定义****二、工作原理****三、示例:基本类型转换****四、示例:转换为自定义类型****五、与构造函数的对比****六、注意事项****七、应用场景****八、与 C 其他类型转换的关系****九、总结** 在C中,类型…

2048小游戏C++板来啦!

个人主页:PingdiGuo_guo 收录专栏:C干货专栏 大家好呀,我是PingdiGuo_guo,今天我们来学习如何用C编写一个2048小游戏。 文章目录 1.2048的规则 2.步骤实现 2.1: 初始化游戏界面 2.1.1知识点 2.1.2: 创建游戏界面 2.2: 随机…