news 2026/4/18 18:21:25

React Native跨平台鸿蒙开发实战系列:项目引入axios,实现接口API请求

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
React Native跨平台鸿蒙开发实战系列:项目引入axios,实现接口API请求

什么是Axios

axios是一个基于Promise的HTTP库,封装了底层的XMLHttpRequest和http模块(移植到鸿蒙OS上的库也封装了鸿蒙的net.http模块)。axios的拦截器功能可以统一处理认证、错误提示和请求认证,减少重复代码,同时Axios可以自动转换Json数据,无需手动调用Json.parse。

Axios是一个基于Promise的HTTP客户端库,专门用于处理网络数据请求‌。它最大的特点是能够同时在浏览器和Node.js环境中运行‌。

核心特性:‌

  • 环境兼容‌:浏览器端使用XMLHttpRequest,Node.js端使用http模块‌
  • Promise API‌:使用Promise处理异步请求,避免回调地狱‌
  • 拦截器机制‌:支持请求和响应的拦截处理‌
  • 数据转换‌:自动转换请求和响应数据
  • ‌安全防护‌:提供CSRF/XSRF防御机制

相比于原生Fetch API,Axios使用更简单方便,提供了更完善的错误处理和超时配置‌


接口示例

axios(config):发送请求
axios.create(config):创建实例
axios.get(url[,config]):发送get请求
axios.post(url[,config]):发哦post请求
axios.defaults[’ ']:配置一个默认
axios.interceptors:拦截器


AxiosRequestConfig类型

常用配置

url:表示用来发送请求的地址,一般为路径,即‘/path’
method:表示发送请求的方法
baseURL:最终发送给服务器的url是baseURL+url
headers:配置所发起网络请求的请求头
params:配置get请求所携带的参数时使用,这里配置的对象会作为参数拼接到url上
data:配置post、put、delete请求所携带的参数时使用
timeout:设置请求的超时事件
onUploadProgress:用于监听上传进度


AxiosResponse类型

axios在返回响应数据时,会默认对这次请求的响应数据进行一次包装

{//这次请求返回的响应数据data:{},//请求状态status:200,//状态说明文字statusText:'OK',//请求的请求头headers:{},//这次请求设置的配置 也就是一个AxiosRequestConfig类型的对象config:{},//表示axios底层封装的请求实例request:{}//HTTP请求各个阶段所花费的时间performanceTiming:{}}

安装依赖包:

npm install axios

发送一个get请求:

Axios是一个基于Promise的HTTP客户端库,用于在浏览器和Node.js中发起网络请求。它专注于简化HTTP请求处理,相比原生Fetch API更易用,支持请求拦截、响应转换、取消请求等功能‌。

axios({url:'/get',//对这个网址发送的请求,响应的数据即为携带的参数baseURL:'httpbin.org',method:'get',params:{username:'limiaomiao',password:12345}}).then((res:AxiosResponse<string>)=>{console.log('[axios]'+JSON.stringify(res))})

使用axios.get()

由于ArkTs不再支持any类型,所以在使用get方法时需要指定泛型参数的类型:

axios.get<T=any,R=AxiosResponse<T>,D=any>(url)
  • T是响应数据类型
  • R是AxiosResponse类型中data字段的类型
  • D是当发送get请求时,在url中添加的查询参数的类型,参数为空时,D为null类型

可以看到这个Axios类中主要的方法就是request方法,用于发起实际的网络请求,而且他还在Axios的原型链上绑定了我们常用的一些请求类型,并在绑定的方法体内去调用request方法,config信息也就是将我们在axios.get方法中的配置信息使用mergeConfig方法合并起来,最终返回一个AxiosRequestConfig对象。

importReactfrom'react';import{View,Text,Dimensions,StyleSheet,Image,TextInput,TouchableOpacity,Alert}from'react-native';import{Modal,ModalContent,ModalPortal}from'react-native-modals';//获取屏幕的宽高constscreenWidth=Math.round(Dimensions.get('window').width);constscreenHight=Math.round(Dimensions.get('window').height);importaxiosfrom'axios';constAppStyles=StyleSheet.create({wrap:{width:'100%',height:screenHight,backgroundColor:'#85BDFF'},title:{width:'100%',height:72,fontFamily:'OPPOSans, OPPOSans',fontWeight:'normal',paddingTop:50,fontSize:36,color:'#304057',lineHeight:72,textAlign:'center',fontStyle:'normal'},banner:{paddingTop:50,paddingRight:32,paddingLeft:32,},bannerItem:{paddingTop:10,display:'flex',flexDirection:'row',alignItems:'center',justifyContent:'center',width:'50%',},loginBox:{position:'relative',width:'100%',paddingTop:29,paddingLeft:20,paddingRight:20,borderTopRightRadius:30,borderTopLeftRadius:30,backgroundColor:'#F2F8FF',flex:1},loginBoxCode:{marginTop:20,position:'relative',width:'100%',},loginBoxCodeBtn:{position:'absolute',right:4,top:4,width:110,height:40,lineHeight:40,borderRadius:10,backgroundColor:'#1669E3',textAlign:'center',fontWeight:'bold',fontSize:14,color:'#FFFFFF',},loginBtn:{position:'absolute',left:20,bottom:30,width:'100%',height:48,lineHeight:48,borderRadius:10,backgroundColor:'#1669E3',textAlign:'center',fontWeight:'bold',fontSize:14,color:'#FFFFFF',}})functionHomePath(){const[phone,onChangePhone]=React.useState('');const[code,onChangeCode]=React.useState('');const[visible,setVisible]=React.useState(false);constsubmitLogin=()=>{console.log('submitLogin',phone,code);varregex=/^1[3-9]\d{9}$/;if(!regex.test(phone)){Alert.alert('请输入正确的手机号码');return;}varregex=/^\d{6}$/;if(!regex.test(code)){Alert.alert('请输入正确的验证码');return;}// setVisible(true);axios.get('https://xxx.com/id_type?t=1764427207873').then(function(response){console.log("get id_type success:",JSON.stringify(response));Alert.alert(JSON.stringify(response));// navigation.navigate('IndexPath')}).catch(function(error){console.log(error);});}return(<View style={AppStyles.wrap}><Text style={AppStyles.title}>鸿蒙ReactNative系统</Text><View style={AppStyles.banner}><View style={{display:'flex',flexDirection:'row',justifyContent:'space-between'}}><View style={AppStyles.bannerItem}><Image style={{width:27,height:27}}source={require('./images/checked.png')}></Image><Text style={{paddingLeft:4}}>实时业绩便捷查询</Text></View><View style={AppStyles.bannerItem}><Image style={{width:27,height:27}}source={require('./images/checked.png')}></Image><Text style={{paddingLeft:4}}>订单状态轻松把控</Text></View></View><View style={{display:'flex',flexDirection:'row',justifyContent:'space-between'}}><View style={AppStyles.bannerItem}><Image style={{width:27,height:27}}source={require('./images/checked.png')}></Image><Text style={{paddingLeft:4}}>宣传数据全程管理</Text></View><View style={AppStyles.bannerItem}><Image style={{width:27,height:27}}source={require('./images/checked.png')}></Image><Text style={{paddingLeft:4}}>海量素材一站转发</Text></View></View></View><Image style={{width:289,height:182,display:'flex',alignSelf:'center',margin:20}}source={require('./images/login-bg.png')}></Image><View style={AppStyles.loginBox}><TextInput style={{width:'100%',height:48,borderRadius:10,backgroundColor:'#FFFFFF',paddingLeft:16,paddingRight:16,fontSize:14,color:'#304057'}}placeholder="请输入手机号"onChangeText={onChangePhone}value={phone}keyboardType="numeric"maxLength={11}></TextInput><View style={AppStyles.loginBoxCode}><TextInput style={{width:'100%',height:48,borderRadius:10,backgroundColor:'#FFFFFF',paddingLeft:16,paddingRight:16,fontSize:14,color:'#304057'}}placeholder="请输入验证码"onChangeText={onChangeCode}value={code}keyboardType="numeric"maxLength={6}></TextInput><Text style={AppStyles.loginBoxCodeBtn}>获取验证码</Text></View><TouchableOpacity style={AppStyles.loginBtn}onPress={submitLogin}><Text style={{fontSize:14,color:'#FFFFFF',lineHeight:48,textAlign:'center',fontWeight:'bold'}}>登陆</Text></TouchableOpacity></View><ModalPortal><Modal visible={visible}onTouchOutside={()=>{setVisible(false)}}onSwipeOut={()=>setVisible(false)}><ModalContent><Text>登录成功!欢迎使用我们的应用。</Text><Text>手机号:{phone}</Text><TouchableOpacity style={{marginTop:20,padding:10,backgroundColor:'#1669E3',borderRadius:5}}onPress={()=>setVisible(false)}><Text style={{color:'#FFFFFF',textAlign:'center'}}>确定</Text></TouchableOpacity></ModalContent></Modal></ModalPortal></View>);}

接下来通过打包命令npn run harmony将reactNative的代码打包成为bundle,这样可以进行在开源鸿蒙OpenHarmony中进行使用。

接下来将bundle文件复制到鸿蒙的项目工程中进行引入,然后,正常打包后,可以看到以下的运行效果:

这里请求成功了,但是提示没有项目的ID参数不存在,这里是没有传Header头。

欢迎大家加入开源鸿蒙跨平台开发者社区,一起共建开源鸿蒙跨平台生态。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 18:20:50

AI Agent开发学习顺序:工具调用到完整交付

2.让模型“会用工具”Agent的价值&#xff0c;是它能直接干。可以先从这几个方向入手工具调用&#xff1a;召回、函数调用、代码执行、接口调用。 例如做个“数据分析Agent”&#xff0c;用户丢张表过来&#xff0c;它能独立判断分析方法、写代码跑出结果、最后用人话把结论说清…

作者头像 李华
网站建设 2026/4/18 18:20:32

面试官: Span定义及作用解析(答案深度解析)持续更新

面试题&#xff1a;Span 是什么&#xff1f;——分布式追踪中的“原子时间切片”&#x1f3af; 一句话面试回答&#xff08;先镇场&#xff09;&#xff1a; “Span 是分布式追踪&#xff08;Distributed Tracing&#xff09;中最核心的原子单元&#xff0c;它不是一次 HTTP 请…

作者头像 李华
网站建设 2026/4/18 17:56:14

面试官: TraceId与SpanId区别解析(答案深度解析)持续更新

TraceId vs SpanId&#xff1a;分布式链路追踪的“身份证”与“工号” 面试官问你 TraceId 和 SpanId 的区别&#xff0c;绝不是想听教科书定义——他是在考察你是否真正在生产环境用过 SkyWalking、Zipkin 或 Sleuth&#xff0c;有没有 debug 过跨 5 个微服务的超时问题。下面…

作者头像 李华
网站建设 2026/4/14 6:39:06

RWKV7-1.5B-G1A模型精讲:深入理解其独特的注意力机制算法

RWKV7-1.5B-G1A模型精讲&#xff1a;深入理解其独特的注意力机制算法 1. 为什么RWKV值得关注 在当今大模型领域&#xff0c;Transformer架构几乎成了标配。但RWKV系列模型却走出了一条不同的路&#xff0c;它用独特的RWKV注意力机制&#xff0c;在保持强大性能的同时&#xf…

作者头像 李华