1. 组件结构对比
Vue 3:
vue
<script setup>
import { ref } from 'vue';
const message = ref('Hello');
</script>
<template>
<div @click="message = 'World'">
<Text>{{ message }}</Text>
</div>
</template>ArkUI (ArkTS):
typescript
@Entry
@Component
struct MyComponent {
// 1. 响应式状态 (类似 ref)
@State message: string = 'Hello';
// 2. 构建 UI (类似 template,但直接写在 build 函数里)
build() {
Column() { // 类似 div
Text(this.message)
.fontSize(20)
.onClick(() => {
this.message = 'World'; // 直接修改,自动驱动视图更新
})
}
}
}2. 状态管理映射表 (背下这个表,你就通了 80%)
| Vue 概念 | 鸿蒙 ArkUI 装饰器 | 说明 |
|---|---|---|
ref / data | @State | 组件内私有状态,修改会触发 build() 刷新。 |
props (单向) | @Prop | 父组件传给子组件,子组件修改不会同步回父组件。 |
v-model / emit | @Link | 父子双向绑定。子组件改动,父组件状态同步变。 |
provide / inject | @Provide / @Consume | 跨层级组件通信(爷孙通信)。 |
watch | @Watch | 监听数据变化执行逻辑。 |
computed | 直接写 get 方法 | 计算属性直接用 getter 实现。 |
3. 渲染控制映射
- v-if: ArkTS 中直接使用
if-else语句控制渲染。 - v-for: ArkTS 中使用
ForEach或LazyForEach(虚拟列表,性能优化版)。
第三阶段:Java 到鸿蒙系统能力的映射 (耗时:1天)
这里是 Vue 前端不涉及,但 Java 程序员非常擅长的领域:应用生命周期与并发。
1. 核心概念:Ability (UIAbility)
你可以把它理解为 Android 的 Activity,或者 Spring Boot 的一个 Controller 入口。
- onCreate: 应用启动。
- onDestroy: 应用销毁。
- onWindowStageCreate: 窗口建立(UI 准备好了,加载页面)。
2. 最大的坑:并发模型 (Actor Model)
这是 Java 程序员最容易翻车的地方。
- Java: 共享内存并发。你定义一个
static变量,开个new Thread就能改。 - 鸿蒙 (ArkTS): 内存隔离模型。主线程(UI线程)和 Worker 线程之间内存不共享!
- 你不能直接在子线程修改 UI 绑定的
@State变量。 - 解决方案: 使用
TaskPool(推荐) 或Worker。必须通过消息传递(序列化/反序列化)来交换数据。这有点像后端微服务之间的通信,而不是 Java 的多线程。
- 你不能直接在子线程修改 UI 绑定的
第四阶段:实战路径建议
不要去看几百页的 API 文档,直接按这个顺序写 Demo:
- Day 1 上午: 下载 DevEco Studio,跑通 "Hello World"。熟悉工程目录结构(
entry/src/main/ets类似于 Java 的src/main/java)。 - Day 1 下午: 写一个“计数器”页面。练习
@State,Column,Row,Button。体验一下类似 CSS 的链式调用属性(.width('100%').height(50))。 - Day 2: 写一个“待办事项列表 (TodoList)”。
- 用到
ForEach渲染列表。 - 拆分组件:父组件传 List 给子组件(
@Prop),子组件点击完成通知父组件(@Link或回调)。 - 这步做完,你的 Vue 经验就完全转化过来了。
- 用到
- Day 3: 网络与数据。
- 封装一个
HttpUtils(类似 Java 的 OkHttp 或 Vue 的 Axios)。 - 调用 API 获取数据,并在 UI 上展示。
- 使用
Preferences(类似 Android SharedPreferences) 存一下用户设置。
- 封装一个
给高级程序员的特别避坑指南
- 别找 XML/HTML: 鸿蒙 Next 彻底抛弃了 Java/XML 写法,也抛弃了 HTML/CSS。UI 也是代码(ArkTS),这是趋势(Flutter, SwiftUI, Compose 都是这样)。
- 链式调用的顺序: 样式属性的顺序有时候会影响布局(类似 CSS 的盒模型),注意布局容器
Column/Row/Stack/Flex的特性。 - 真机调试: 鸿蒙模拟器很吃内存(和你跑 Android 模拟器一样),有条件尽量用真机或者远程真机。
- 生态库: 鸿蒙的 Maven 仓库叫 Ohpm (Open Harmony Package Manager)。去
ohpm.openharmony.cn找第三方库(比如 axios, zxing 等都有鸿蒙版)。
总结
你有 Java 的底子,后端逻辑和类型系统难不倒你;你有 Vue 的底子,UI 构建和状态管理你会觉得无比亲切。