theme: qklhk-chocolate
前言
近年来HarmonyOS的开发岗位好像越来越多了,作为一名前端boy我们应该要未雨绸缪,至少得学习一下怎么开发。下面会介绍前端技术栈和鸿蒙技术栈的区别,以及如何创建第一个项目。
技术差异
技术栈比对
| 技术维度 | Web前端技术 | HarmonyOS开发技术 |
|---|---|---|
| 基础语言 | JavaScript/TypeScript | ArkTS(TS超集) |
| 组件系统 | Web Components/React组件 | ArkUI声明式组件 |
| 布局方案 | CSS Flex/Grid | ArkUI弹性布局 |
| 状态管理 | Redux/Vuex/Pinia | @State/@Prop/@Link装饰器 |
| 路由导航 | React Router/Vue Router | Router模块 + navigation |
| 生态工具 | Webpack/Vite | Hvigor构建系统 |
| 多端适配 | 媒体查询/响应式设计 | 分布式设计+自适应布局 |
| 动画系统 | CSS Animation/GSAP | 属性动画+显式动画 |
| 网络请求 | Fetch/Axios | @ohos.net.http模块 |
| 包管理 | npm/yarn | ohpm(HPM) |
根据上面这个列表,在不考虑如何打包和如何创建应用的情况下,只要能够掌握对应模块的语法,就可以像我们开发前端项目一样去开发HarmonyOS应用。
其中这个arkts是我们需要重点掌握的东西,本质上就是一个js/ts的超集。对于前端开发来说非常的友好。
下面通过一些案例介绍相关语法差异
组件差异
-
vue3组件vue<template> <div class="card"> <h3>{{ title }}</h3> <button @click="onClick">点击</button> </div> </template> <script setup> defineProps(['title']) const emit = defineEmits(['click']) const onClick = () => { emit('click') } </script> -
ArkUI组件tsx@Component export struct MyCard { @Prop title: string private onClick: () => void build() { Column() { Text(this.title) .fontSize(20) Button('点击') .onClick(() => this.onClick()) } .padding(12) } }ArkUI组件的和我们的vue组件有很大差别,更趋向于类组件的方式。-
使用
@Component装饰器声明组件 -
通过
build()方法取代<template>模板 -
使用链式调用设置样式
-
响应式变量差异
-
vue3定义响应式变量vue<script setup> import { ref, reactive } from 'vue' // 基本类型 const count = ref(0) // 对象类型 const user = reactive({ name: '小明', age: 25 }) // 计算属性 const isAdult = computed(() => user.age >= 18) </script> -
arkui中定义响应式变量tsx@Component struct UserProfile { // 基本类型 @State count: number = 0 // 对象类型 @State user: { name: string, age: number } = { name: '小明', age: 25 } // 派生状态 get isAdult(): boolean { return this.user.age >= 18 } } -
使用装饰器
@State替代ref/reactive -
计算属性直接通过
getter实现 -
不需要手动
import响应式API
循环渲染和条件渲染
-
vue组件vue// 条件 <template> <div v-if="showContent">内容区域</div> <div v-else>加载中...</div> </template> // 循环 <template> <ul> <li v-for="item in list" :key="item.id"> {{ item.name }} </li> </ul> </template> -
arkui组件tsx// 条件 build() { Column() { if (this.showContent) { Text('内容区域') } else { Progress() .width(50) .height(50) } } } // 循环 build() { List() { ForEach(this.list, (item: ListItem) => { ListItem() { Text(item.name) .fontSize(16) } }, (item) => item.id.toString()) } }
这块条件渲染和渲染应该比较好理解,语法基本上和react很像
写样式的方式
-
vue组件vue<style scoped> .card { padding: 12px; background: #fff; } .title { font-size: 18px; } </style> -
arkUI组件tsx@Styles function cardStyle() { .padding(12) .backgroundColor(Color.White) } @Styles function titleStyle() { .fontSize(18) } // 使用样式 build() { Column() .useStyle(cardStyle) Text('标题') .useStyle(titleStyle) }
这块差异很大,写法完全不一样arkui这边用的是链式调用定义样式,这要是样式太多,简直是噩梦
上面简单介绍了一些语法差异,后面还会出一期专门以前端的视角来对比的文章。
那么上面的这些内容重要吗
答案是,不那么重要
如果你要纯鸿蒙开发那就得去官网好好学习语法,但是我们还可以以前端的方式去开发
HarmonyOS,
harmonyOS提供了一个ArkWeb方案,具体有点像webview,以后会详细介绍
下载开发工具
通过上面的对比简单,相信你已经对harmonyOS已经有一点点了解。接下来就需要开始实操了。
官网:DevEco Studio 5.0.0-AI辅助编程(Beta)- 华为开发者联盟
先去官网下载开发工具
建议选择这个发行版,一般这个是正式推送给用户使用的,稳定!!!
下载下来并解压,你会得到这个
按流程安装
创建第一个项目
如果你有安装过,并且需要重新安装就选择上面那个
继续下一步
先创建一个空项目
创建完成之后,他会自动开始下载依赖,这里先等待依赖下载完成
对于英文不好的小伙伴可以去下载一下中文插件
重启之后,界面的菜单就变成中文了
这个开发工具的用法和idea不能说一模一样,只能说很像,对于有用过webstrom的 小伙伴应该很熟悉
接下来要运行项目了,我们需要先下载模拟器
这边随便选择一个镜像,按你的需要来,也可以像我一样直接默认第一个
等它下载完成
下载完成之后,就可以选择选择这个镜像,并且创建模拟器
接下来你需要启动这个模拟器
不出意外,你的模拟器运行成功桌面上应该会出现一个手机模拟器
这时候这边的运行就会出现这个模拟器的选项,你的应用就可以在这个模拟器上面运行
经典的hello word,你已经迈出了重要的一步
结尾
到这里就完成了最重要的步骤,把项目跑起来。接下来就是项目实战了,尽情期待。