ArkTS 网络请求全流程:从 Http 到数据渲染 HarmonyOS 5.0.0

🌐 ArkTS 网络请求全流程:从 Http 到数据渲染

鸿蒙系统开发中,很多场景都离不开网络请求:

  • 加载商品列表
  • 获取天气数据
  • 提交登录信息

但你是否遇到过这些问题?

  • 不知道用哪个模块发请求?
  • 请求写进页面逻辑太乱?
  • 无法优雅地处理 Loading、失败等状态?

本文将带你系统掌握 ArkTS 的网络请求能力 —— 从封装 Http,到列表渲染、异常处理全流程演练


✅ 用哪个模块发请求?

ArkTS 提供官方网络模块:

import http from '@ohos.net.http'

封装简单,支持 GET/POST、Header 设置、JSON 自动转换等。


🎯 本文目标

我们将实现一个“用户列表”页面,包含以下能力:

  • 页面加载时请求接口数据;
  • 显示 Loading 状态;
  • 成功渲染用户卡片列表;
  • 请求失败显示错误提示。

📦 Step1:封装请求模块

// api/user.ts
import http from '@ohos.net.http'

export async function fetchUsers(): Promise<any[]> {
  const httpRequest = http.createHttp()
  const response = await httpRequest.request(
    'https://jsonplaceholder.typicode.com/users',
    {
      method: http.RequestMethod.GET,
      header: {
        'Content-Type': 'application/json'
      },
      readTimeout: 6000
    }
  )

  if (response.responseCode !== 200) {
    throw new Error('网络请求失败')
  }

  return JSON.parse(response.result as string)
}

说明:

  • 创建请求实例 createHttp()
  • 调用 .request() 方法发起请求
  • 自动解析 JSON 数据返回

📦 Step2:页面逻辑 UserList.ets

import { fetchUsers } from '../api/user'

@Entry
@Component
struct UserList {
  @State users: any[] = []
  @State loading: boolean = true
  @State error: string = ''

  async aboutToAppear() {
    try {
      this.loading = true
      this.users = await fetchUsers()
    } catch (e) {
      this.error = (e as Error).message
    } finally {
      this.loading = false
    }
  }

  build() {
    Column() {
      If(this.loading, () => {
        Text('加载中...').fontSize(20).fontColor(Color.Grey)
      }).elseIf(this.error !== '', () => {
        Text(`错误:${this.error}`).fontColor(Color.Red)
      }).else(() => {
        List() {
          ForEach(this.users, (user) => {
            ListItem() {
              Column() {
                Text(`姓名:${user.name}`).fontSize(18)
                Text(`邮箱:${user.email}`).fontSize(14).fontColor(Color.Grey)
              }
              .padding(10)
            }
          })
        }
      })
    }
    .padding(20)
  }
}

📌 核心解读

aboutToAppear()

鸿蒙页面的生命周期钩子,页面显示时触发,可用于数据初始化加载。

多状态处理建议

使用 3 个状态变量:

  • loading 控制加载态;
  • error 控制异常提示;
  • users 渲染列表内容。

使页面渲染逻辑更清晰、鲁棒性更强。


✅ 高级技巧:封装请求 hooks

你可以提取一个 useRequest 工具模块:

export function useRequest<T>(fn: () => Promise<T>) {
  let data: T | null = null
  let loading = true
  let error = ''

  async function run() {
    try {
      loading = true
      data = await fn()
    } catch (e) {
      error = (e as Error).message
    } finally {
      loading = false
    }
  }

  return { data, loading, error, run }
}

在页面中使用:

const { data, loading, error, run } = useRequest(fetchUsers)

实现请求逻辑解耦。


🧩 小结

本文你学到了:

  • 如何用 @ohos.net.http 发起 GET 请求;
  • 如何封装接口模块、处理 loading 和 error;
  • 如何用生命周期钩子自动加载数据;
  • 如何渲染动态列表。

掌握这些,就能轻松应对 90% 的鸿蒙数据页面开发。


📘 下一篇预告

《鸿蒙适配指南:多设备、多尺寸界面自适应实践》

我们将从布局系统、MediaQuery、弹性容器等角度入手,解决不同设备屏幕适配难题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值