【HarmonyOS开发实战】Axios在鸿蒙系统中的实战应用

前言

之前封装过HTTP,最近发现 axios 已经有鸿蒙版本了,测试了一下也挺好用的,也进行了封装,替换了默认的 HTTP 封装,做的事情和封装HTTP类似,基地址,请求响应拦截器,还额外的抽取了通用的请求方法,避免每次都去设置一堆泛型,抽取了通用的相应类型,只需要设置不同的即可。

下载安装

OpenHarmony三方库中心仓:ohpm.openharmony.cn/#/cn/detail…

ohpm install @ohos/axios

配置权限

ohos.permission.INTERNET
在这里插入图片描述

导入axios

import axios from '@ohos/axios'

创建一个axios实例

内部做一些axios通用配置:比如,基地址。

const axiosInstance=axios.create({
  baseURL:'https://xxx.xxx.net'
})

请求参数类型约束

定义请求参数的类型约束(以下以post为例):请求参数写在axios-post请求的第二个参数data。
在这里插入图片描述

定义类型约束这个参数,让它不是any,否则随便写什么都可以。

可以怎么定义这个约束?

可以把后端提供的字段用interface定义起来。
在这里插入图片描述
在这里插入图片描述

1)可以用as断言来约束类型。
2)泛型的第三个参数(推荐)。

axios泛型的第三个参数使用

泛型T一共有三个参数,请求参数的约束类型是写在泛型T的第三个参数。
在这里插入图片描述

代码如下:

import axios from '@ohos/axios'

/**
 * 账号密码登录模型
 */
export  interface PostUserLoginPasswdData {
  /**
   * 用户密码
   */
  passwd?: string;

  /**
   * 用户手机号
   */
  phone?: string;
}

//如果不限定类型,post传的参数是任意的,会报错


@Entry
@Component
struct AxiosTestPage {
  build() {
    Navigation() {
      Scroll() {
        Column({ space: 10 }) {
          Button('发送请求-约束请求参数格式')
            .onClick(async () => {
              //   创建一个axios实例,内部做一些axios通用配置
              const axiosInstance = axios.create({
                baseURL: 'https://xxx.xxx.net'
              })
              const res = await axiosInstance.post<null, null, PostUserLoginPasswdData>('/user/login/passwd',
                { passwd: '888itc764%...', phone: '131666666672' }
              )
              AlertDialog.show({ message: JSON.stringify(res, null, 2) })
            })
        }
        .constraintSize({ minHeight: '100%' })
      }
      .width('100%')
      .height('100%')
    }
    .title('')
    .titleMode(NavigationTitleMode.Mini)
  }
}

效果:
请求成功。
在这里插入图片描述

axios泛型的第二个参数使用

1.导入AxiosResponse。

import axios, { AxiosResponse } from '@ohos/axios'

2.后端给的接口,返回响应的数据部分定义interface类型。

3.AxiosResponse<参数1,参数2>的两个参数必传。

4.定义参数1的数据类型。

为什么要定义AxiosResponse参数1的数据类型?

因为第一层对象结构是axios的,对象嵌套里面的数据才是我们要的。所以要定义第二个参数的第一个参数定义后端返回的基本结构。
在这里插入图片描述

AxiosResponse<null,null>的两个参数必传。(AxiosResponse第一个参数:用于指定后端返回的数据的类型(重要)。第二个没什么用,写null就可以。)

可以暂时写null不报错。

但是如果写的是null虽然不报错,但是点不出来data里面的数据。
只能点到res.data。

不能点出res.data.code。
在这里插入图片描述

所以传真的类型,如下:
第一个参数的类型去接口文档后端返回的数据的类型拿过来定义。
在这里插入图片描述

这个时候res.data.code可以点出来了。
在这里插入图片描述

又因为不同的接口,result的类型是不一样的所以result的类型用T表示。
在这里插入图片描述

抽取泛型的第二个参数

用泛型第二个参数用于指定后端返回的数据的类型。

这个参数其实是对象嵌套对象再嵌套对象的结构。

1)第一层对象是axios类型的基本返回结构。

2)对后端来说,后端有自己的结构。

3)后端给的不同的接口,result也不同,所以result的类型变为一个动态的T。但是使用三层对象嵌套这样写比较麻烦,避免每次都去设置一堆泛型。因为变化的只有嵌套最里面的result是变化的。
第一层axios的基本结构是不变的,第二层data的基本结构也是不变的,只有第三层result的结构会变化。
在这里插入图片描述

所以,把第二个参数抽取出去。

4)arkts有一个专门用来存类型的关键词type。
type的作用:用来存储类型。

type AxiosResponseData =AxiosResponse<ServiceResponse<ServiceResponseResult>, null>

axios拦截器

请求拦截器

在请求发送之前执行。你可以在这里修改请求的配置(如headers、URL、数据等),或者在某些条件下拒绝请求。如果请求拦截器返回Promise.reject,则请求将不会发送到服务器,并且会直接跳转到.catch()处理错误。

// 添加请求拦截器
axios.interceptors.request.use((config:InternalAxiosRequestConfig) => {
  // 对请求数据做点什么
  return config;
}, (error:AxiosError) => {
  // 对请求错误做些什么
  return Promise.reject(error);
});

响应拦截器

在请求发送到服务器并且响应返回之后执行,但在.then()处理之前。你可以在这里修改响应数据,或者在某些条件下拒绝响应。如果响应拦截器返回Promise.reject,则.then()中的成功处理将不会被执行,控制流程会跳转到.catch()处理错误。

// 添加响应拦截器
axios.interceptors.response.use((response:AxiosResponse)=> {
  // 对响应数据做点什么
  return response;
}, (error:AxiosError)=> {
  // 对响应错误做点什么
  return Promise.reject(error);
});

总结

如何使用 axios 进行 HTTP 请求的操作。我从下载安装 axios 开始,逐步讲解了其配置权限、创建实例、请求参数类型约束、泛型参数使用以及拦截器的配置等内容。通过这些步骤,可以更加规范和高效地进行 HTTP 请求操作,大幅减少重复代码,提高开发效率。

有很多小伙伴不知道该从哪里开始学习鸿蒙开发技术?也不知道鸿蒙开发的知识点重点掌握的又有哪些?自学时频繁踩坑,导致浪费大量时间。结果还是一知半解。所以有一份实用的鸿蒙(HarmonyOS NEXT)全栈开发资料用来跟着学习是非常有必要的。

获取完整版高清学习资料,请点击→鸿蒙全栈开发学习资料(安全链接,请放心点击)

这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了

最新鸿蒙全栈开发学习线路在这里插入图片描述

鸿蒙HarmonyOS开发教学视频

在这里插入图片描述

大厂面试真题

在这里插入图片描述

在这里插入图片描述

鸿蒙OpenHarmony源码剖析

在这里插入图片描述

这份资料能帮住各位小伙伴理清自己的学习思路,更加快捷有效的掌握鸿蒙开发的各种知识。有需要的小伙伴自行领取,,先到先得~无套路领取!!

获取这份完整版高清学习资料,请点击→鸿蒙全栈开发学习资料(安全链接,请放心点击)

<think>好的,用户让我介绍鸿蒙实战教程,我需要先确定他们想了解的具体内容。鸿蒙系统华为开发的,可能用户想知道如何开始开发应用或者深入系统底层。首先,我应该概述鸿蒙的基本情况,比如HarmonyOS的特点,分布式能力,一次开发多端部署这些核心概念。 接下来,用户可能需要知道学习鸿蒙开发的前置条件,比如需要掌握Java或JavaScript,或者ArkTS语言。这里要分清楚,如果是应用开发,可能用ArkTS和ArkUI,而系统开发可能需要C/C++和Linux知识。需要明确说明不同的学习路径对应的技能要求。 然后,实战教程的结构应该分步骤,从环境搭建开始,包括IDE的安装,DevEco Studio的使用,配置开发环境。然后是基础部分,比如UI开发、页面路由、数据管理,这些是应用开发的基础。接着是高级主题,如分布式能力、跨设备协同、性能优化,可能用户对实际项目中的应用更感兴趣,需要给出具体例子,比如多设备音乐播放器。 资源推荐部分,应该包括官方文档、社区论坛、开源项目,这些对学习者很重要,可以帮助他们深入学习和解决问题。还要提到持续学习的重要性,因为鸿蒙更新快,需要跟进最新动态。 需要确保回答结构清晰,分点说明,并且使用正确的中文术语。同时,用户可能对实战项目的具体步骤感兴趣,所以举一个音乐播放器的例子,说明如何利用分布式能力,这样能帮助用户理解实际应用场景。 最后,检查是否符合系统指令,所有数学公式用$...$,独立公式用$$...$$,虽然这里可能用不到,但要注意其他技术术语的正确格式。确保LaTeX语法正确,不过这次内容可能涉及代码和系统术语,数学公式可能较少。保持回答自然,用口语化的中文,避免使用Markdown格式,分步骤说明。</think>以下是为您整理的鸿蒙HarmonyOS实战教程介绍,分步骤说明核心学习路径和实战要点: ### 一、鸿蒙系统基础认知 1. **系统定位** HarmonyOS是面向全场景的分布式操作系统,支持手机、平板、智能穿戴、车载设备等终端,核心特性包括: - 分布式软总线技术(实现设备间无缝协作) - 一次开发多端部署($$代码复用率 \geq 70\%$$) - 确定性时延引擎(响应速度提升$25.7\%$) 2. **开发语言选择** - 应用开发:ArkTS(TypeScript扩展)、JavaScript - 系统开发:C/C++ - UI框架:ArkUI声明式开发范式 ### 二、实战环境搭建 1. **开发工具链** - 安装DevEco Studio(鸿蒙官方IDE) - 配置SDK:选择API Version 9+(对应HarmonyOS 3.1+) ```bash # 示例:通过hpm包管理器安装依赖 hpm install @ohos/axios ``` 2. **模拟器调试** - 使用远程模拟器或本地Previewer - 真机调试需注册开发者账号并申请证书 ### 三、核心开发实战模块 #### 阶段1:基础开发 1. **UI开发** - 使用ArkUI组件构建布局 ```typescript @Entry @Component struct Index { build() { Column() { Text('Hello HarmonyOS') .fontSize($30$) .fontWeight(FontWeight.Bold) } } } ``` 2. **页面路由** - 实现页面跳转与参数传递 ```typescript router.pushUrl({ url: 'pages/DetailPage', params: { id: 123 } }) ``` #### 阶段2:进阶功能 1. **分布式能力** - 设备发现与连接 - 跨设备服务调用 ```typescript import deviceManager from '@ohos.distributedHardware.deviceManager'; // 获取设备列表 let devices = deviceManager.getTrustedDeviceListSync(); ``` 2. **数据管理** - 轻量级KV存储($dataStorage.putSync('key', value)$) - 关系型数据库(使用ORM框架) #### 阶段3:性能优化 1. **渲染优化** - 使用LazyForEach延迟加载长列表 - 避免过度重绘(帧率保持$\geq 60fps$) 2. **内存管理** - 监控内存使用:通过HiChecker工具检测内存泄漏 - 对象池技术复用资源 ### 四、典型项目实战 **案例:分布式音乐播放器** 1. 设备角色发现(手机作为控制端,音箱作为输出端) 2. 音频流跨设备传输(时延$< 50ms$) 3. 协同控制:手机调节音量,音箱同步响应 ### 五、学习资源推荐 1. 官方文档:developer.harmonyos.com/cn/docs/documentation 2. 开源项目:OpenHarmony Gitee仓库 3. 社区论坛:51CTO鸿蒙专区、优快云鸿蒙板块 **持续学习建议**:关注每季度的HDC开发者大会,及时获取新特性(如2023年发布的鸿蒙4.0强化了AI能力)。建议通过实际项目迭代学习,例如从简单的IoT设备控制逐步过渡到复杂分布式应用开发。 > 注:学习曲线初期可能较陡峭(建议每天投入$\geq 2$小时实践),但掌握分布式架构思维后,可显著提升多端开发效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值