鸿蒙版本,我的页面请求网络数据并渲染

68 阅读1分钟

介绍

通过网络请求获取数据,并渲染到页面

网络请求接口

export const getUserInfo= async ()=>{
  const axios=axiosInstance
  const userInfo:AxiosResponse<ResponseData<LoginInfoResponse>> = await axios.get<null,AxiosResponse<ResponseData<LoginInfoResponse>>,null>('/driver/users')
  await setUser(userInfo.data.data)
  console.log(`userInfo:${userInfo.data.data}`)
  return userInfo.data.data
}

使用首选项持久化用户数据

export const initUser= ()=>{
  const userStore =preferences.getPreferencesSync(getContext(),{name:LOGIN_INFO_STORE})
  return userStore
}

export const setUser= async (user:LoginInfoResponse)=>{
  const userStore=initUser()
  await userStore.put(LOGIN_INFO,JSON.stringify(user))
  userStore.flush()
}

export const getUser= async ()=>{
  const userStore=initUser()
  const res= await userStore.get(LOGIN_INFO,"string")
  return JSON.parse(res.toString()) as LoginInfoResponse
}

我的页面代码

import { getUser, HmCard, HmCardItem, LoginInfoResponse } from 'common/Index'

@Component
export default struct Mine{

  @State user:LoginInfoResponse={} as LoginInfoResponse

  async aboutToAppear(): Promise<void> {
    this.user=await getUser()
    console.log(`user:${JSON.stringify(this.user)}`)
  }

  build() {

    Column(){

      Image(this.user.avatar===undefined?$r('app.media.ic_avatar_driver'):this.user.avatar)
        .width(60).borderRadius(30)
        .height(60)

      Text(`${this.user.name}`).width('100%').textAlign(TextAlign.Center)

      Text(`司机编号:${this.user.number}`).width('100%').textAlign(TextAlign.Center)

      Text(`手机号:${this.user.phone}`).width('100%').textAlign(TextAlign.Center)

      HmCard() {
        HmCardItem({ leftTitle: '车辆信息', rightText: '' })
        HmCardItem({ leftTitle: '任务设置', rightText: '' })
        HmCardItem({ leftTitle: '系统设置', rightText: '', showBottomBorder: false })
      }
    }

  }

}

感兴趣的小伙伴可以看一下我的gitee地址

gitee.com/liuhaobi/dr…