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
,你已经迈出了重要的一步
结尾
到这里就完成了最重要的步骤,把项目跑起来。接下来就是项目实战了,尽情期待。