❤️前端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,你已经迈出了重要的一步

结尾

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

相关推荐
小小小小宇1 小时前
手写 zustand
前端
Hamm1 小时前
用装饰器和ElementPlus,我们在NPM发布了这个好用的表格组件包
前端·vue.js·typescript
小小小小宇2 小时前
前端国际化看这一篇就够了
前端
大G哥2 小时前
PHP标签+注释+html混写+变量
android·开发语言·前端·html·php
whoarethenext2 小时前
html初识
前端·html
小小小小宇3 小时前
一个功能相对完善的前端 Emoji
前端
m0_627827523 小时前
vue中 vue.config.js反向代理
前端
Java&Develop3 小时前
onloyoffice历史版本功能实现,版本恢复功能,编辑器功能实现 springboot+vue2
前端·spring boot·编辑器
白泽talk3 小时前
2个小时1w字| React & Golang 全栈微服务实战
前端·后端·微服务
摆烂工程师3 小时前
全网最详细的5分钟快速申请一个国际 “edu教育邮箱” 的保姆级教程!
前端·后端·程序员