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

458 阅读5分钟

image.png

theme: qklhk-chocolate

前言

​ 近年来HarmonyOS的开发岗位好像越来越多了,作为一名前端boy我们应该要未雨绸缪,至少得学习一下怎么开发。下面会介绍前端技术栈和鸿蒙技术栈的区别,以及如何创建第一个项目。

技术差异

技术栈比对

技术维度Web前端技术HarmonyOS开发技术
基础语言JavaScript/TypeScriptArkTS(TS超集)
组件系统Web Components/React组件ArkUI声明式组件
布局方案CSS Flex/GridArkUI弹性布局
状态管理Redux/Vuex/Pinia@State/@Prop/@Link装饰器
路由导航React Router/Vue RouterRouter模块 + navigation
生态工具Webpack/ViteHvigor构建系统
多端适配媒体查询/响应式设计分布式设计+自适应布局
动画系统CSS Animation/GSAP属性动画+显式动画
网络请求Fetch/Axios@ohos.net.http模块
包管理npm/yarnohpm(HPM)

​ 根据上面这个列表,在不考虑如何打包和如何创建应用的情况下,只要能够掌握对应模块的语法,就可以像我们开发前端项目一样去开发HarmonyOS应用。

其中这个arkts是我们需要重点掌握的东西,本质上就是一个js/ts的超集。对于前端开发来说非常的友好。

下面通过一些案例介绍相关语法差异

组件差异

  • vue3组件

    • <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组件

    • @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定义响应式变量

    • <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中定义响应式变量

    • @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组件

    • //  条件 
      <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 组件

    • // 条件
      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组件

    • <style scoped>
      .card {
        padding: 12px;
        background: #fff;
      }
      .title {
        font-size: 18px;
      }
      </style>
      
  • arkUI组件

    • ![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)- 华为开发者联盟

先去官网下载开发工具

image-20250317222306631.png 建议选择这个发行版,一般这个是正式推送给用户使用的,稳定!!! image-20250317222330239.png

下载下来并解压,你会得到这个

image-20250317224012326.png

按流程安装

image-20250317225238350.png

创建第一个项目

image-20250317225630806.png

如果你有安装过,并且需要重新安装就选择上面那个

image-20250317225752128.png

继续下一步

image-20250317225857609.png

先创建一个空项目

image-20250317225928400.png

image-20250317230009175.png 创建完成之后,他会自动开始下载依赖,这里先等待依赖下载完成

image-20250317230158099.png

对于英文不好的小伙伴可以去下载一下中文插件

image-20250317230535857.png

重启之后,界面的菜单就变成中文了

image-20250317230608901.png

这个开发工具的用法和idea不能说一模一样,只能说很像,对于有用过webstrom的 小伙伴应该很熟悉

接下来要运行项目了,我们需要先下载模拟器

image-20250317230724838.png

image-20250317230752346.png

这边随便选择一个镜像,按你的需要来,也可以像我一样直接默认第一个

image-20250317230914155.png

等它下载完成

image-20250317230937026.png

下载完成之后,就可以选择选择这个镜像,并且创建模拟器

image-20250317232411383.png

image-20250317232428448.png

接下来你需要启动这个模拟器

image-20250317232459370.png

不出意外,你的模拟器运行成功桌面上应该会出现一个手机模拟器

image-20250317232513015.png

这时候这边的运行就会出现这个模拟器的选项,你的应用就可以在这个模拟器上面运行

image-20250317232514256.png

image-20250317232705755.png

image-20250317232743991.png

image-20250317232800604.png

image-20250317232911028.png

经典的hello word,你已经迈出了重要的一步

结尾

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

OSZAR »