❤️前端boy该如何上手HarmonyOS?

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 复制代码
    ![image-20250317222306631](./前端如何快速上手开发鸿蒙os.assets/image-20250317222306631.png)@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,你已经迈出了重要的一步

结尾

到这里就完成了最重要的步骤,把项目跑起来。接下来就是项目实战了,尽情期待。

相关推荐
Up九五小庞28 分钟前
开源埋点分析平台 ClkLog 本地部署 + Web JS 埋点测试实战--九五小庞
前端·javascript·开源
qq_177767371 小时前
React Native鸿蒙跨平台数据使用监控应用技术,通过setInterval每5秒更新一次数据使用情况和套餐使用情况,模拟了真实应用中的数据监控场景
开发语言·前端·javascript·react native·react.js·ecmascript·harmonyos
烬头88211 小时前
React Native鸿蒙跨平台应用实现了onCategoryPress等核心函数,用于处理用户交互和状态更新,通过计算已支出和剩余预算
前端·javascript·react native·react.js·ecmascript·交互·harmonyos
小雨青年2 小时前
鸿蒙 HarmonyOS 6 | 系统能力 (06) 构建现代化通知体系 从基础消息到实况
华为·harmonyos
木斯佳3 小时前
HarmonyOS 6实战(源码解析篇):音乐播放器的音频焦点管理(上)——AudioSession与打断机制
华为·音视频·harmonyos
2601_949593654 小时前
基础入门 React Native 鸿蒙跨平台开发:卡片组件
react native·react.js·harmonyos
天人合一peng4 小时前
Unity中button 和toggle监听事件函数有无参数
前端·unity·游戏引擎
方也_arkling4 小时前
别名路径联想提示。@/统一文件路径的配置
前端·javascript
毕设源码-朱学姐5 小时前
【开题答辩全过程】以 基于web教师继续教育系统的设计与实现为例,包含答辩的问题和答案
前端
qq_177767375 小时前
React Native鸿蒙跨平台剧集管理应用实现,包含主应用组件、剧集列表、分类筛选、搜索排序等功能模块
javascript·react native·react.js·交互·harmonyos