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

结尾

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

相关推荐
Mr_Mao1 小时前
Naive Ultra:中后台 Naive UI 增强组件库
前端
前端小趴菜053 小时前
React-React.memo-props比较机制
前端·javascript·react.js
摸鱼仙人~4 小时前
styled-components:现代React样式解决方案
前端·react.js·前端框架
sasaraku.4 小时前
serviceWorker缓存资源
前端
RadiumAg5 小时前
记一道有趣的面试题
前端·javascript
yangzhi_emo5 小时前
ES6笔记2
开发语言·前端·javascript
yanlele6 小时前
我用爬虫抓取了 25 年 5 月掘金热门面试文章
前端·javascript·面试
中微子7 小时前
React状态管理最佳实践
前端
烛阴7 小时前
void 0 的奥秘:解锁 JavaScript 中 undefined 的正确打开方式
前端·javascript
中微子7 小时前
JavaScript 事件与 React 合成事件完全指南:从入门到精通
前端