简单了解下react中处理API的get与post以及封装应用 - Web前端
作者:98wpeu发布时间:2026-09-13分类:网页前端技术浏览:11

在Web前端开发项目中,处理数据交互,不管在原生javascript、jQuery还是在流行框架vuejs和react里,普遍用的是get和post方法;前二者的处理,相信大家很熟悉了,不在此次分享主题中,至于vuejs之前也分享过一篇文章:聊聊vuejs里对于API接口的处理、封装以及跨域方法应用,今天我们是谈谈react中的get与post以及封装应用。
跟原生的JS里一样,post是发送请求,后端返回相关数据,而get我们可以直接从服务器后台拉取相关数据,这个很简单,不啰嗦了。
下面聊下react里的处理方法。
处理方式
post
拿表单的提交为例:
let FormData = new FORMdata();
formData.append("name","admin");
FormData.APPend("password","admin123");
etch(url , {
method: 'POST',
headers: {},
body: formData,
).then((response) => {
if (response.ok) {
return response.json();
}
).then((JSON) => {
alert(JSON.stringify(json));
).catch((error) => {
console.error(error);
);这个是个很简单的表单,提交用户名和密码的方式处理。
get
安装superAgent模块,这是一个可以从服务器获取get数据或者把数据推送post到服务器的工具:
zhyuzh$ cnpm i superagent --save-dev
在dist目录下创建一个datas/mydata.js用于放置文件,代替服务器接口返回的数json数据,所以最好使用严格的json格式,字段名都带双引号,最后一个字段后面不带逗号:
[{
"title": "标题1",
"text": "文字内容1"
},{
"title": "标题2",
"text": "文字内容2"
}]发起get请求
当元素被添加到页面时候,发起请求,注意这里使用JSON对数据进行了转换.
获取数据之后,使用setState能够让数据立即生效。
HomePage.js中修改的部分:
componentDidMount() {
let that = this
superagent.get('datas/mydata.js')
.end((err, res) => {
that.setState({
mylist: JSON.parse(res.text)
})
})
}在render()方法中,如果使用了mylist数据生成元素(比如用一个list生成多个重复界面元素),setState会在数据读取完成后自动刷新这些元素。
类似下面的代码:
let rightItems = []
for (let i = 0; i < this.state.articleList.length; i++) {
let data = this.state.articleList[i]
rightItems.push(h(Grid, {
item: true,
xs: 12,
sm: 6,
md: 4,
lg: 3,
}, [
h(Card, {
className: CSS.card
}, h(CardContent, {}, [
h(Cardmedia, {
image: data.image,
className: css.cardMedia
}),
h(CardContent, {
style: {
padding: 0
},
}, data.title)
]))
]))
}react中get与post的区别
1.提交方式
get : get会将接收到的数据拼接到url地址中,以"?"问号划分,问号后面是接收到的数据,多个数据之间用&连接.用户可以很直观的看见。
post : post会将接收到的数据放置在html header中一起发送到指定的url地址内.用户看不到这个过程。
2.传递数据大小
get : get传递数据的大小因为受到浏览器地址栏的限制,所以一般在2k-8k,这要据浏览器而定,比如谷歌浏览器就是8k。
post : post传递数据的大小最小是2M,但理论上是无上限的。
3.应用范围
get : get一般用于获取/查询资源信息.多用于A标签的href属性中,也常用于location.href属性中。
post :post一般是用于更新数据信息.多用于表单提交。
4.安全性
get的安全性比post较差。
封装和应用
这里直接上DEMO,比如我们可以这样去分装一段功能代码:
'use strict';
import React, {
Component,
} from 'React-Native';
class NetUItl extends React.Component {
static postFrom(url, data, callback) {
var fetchoptions = {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-type': 'Application/x-www-form-urlencoded'
},
body: 'data=' + data + ''//这里我参数只有一个data,大家可以还有更多的参数
};
Fetch(url, fetchOptions).then((response) => response.text()).then((responseText) => {
callback(JSON.parse(responseText));
}).done();
}
/**
*url :请求地址
*data:参数(JSON对象)
*callback:回调函数
*/
static postJson (url,data,callback){
var fetchOptions = {
method:'POST',
headers:{
'Accept': 'application/json',
//json形式
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
};
fetch(url, fetchOptions).then((response) => response.text()).then((responseText) => {
callback(JSON.parse(responseText));
}).done();
}
//get请求
/**
*url :请求地址
*callback:回调函数
*/
static get(url, callback) {
fetch(url).then((response) => response.text()).then((responseText) => {
callback(JSON.parse(responseText));
}).done();
}
}
module.Exports = Netuitl;然后再去具体分模块去应用它:
//get 的调用方法
NetUtil.get("http://v.juhe.cn/weather/index?format="+format+"&key="+key+"&cityname="+cityname,function (ret) {
//回调的结果处理;
})
//post接口
/*
let data={'Username':'123','password':'123456','token':'HSHSIHIFAUINNSNAFKSKJFNKFKFNFNFNK'};
NetUitl.postJson(url,,function (set){
switch (set.retCode) {
case "0000":
alert("登录成功");
break;
case "0001":
alert("登录失败");
break;
default:
alert("登录失败");
});
//postFrom的调用
let url = Global.LOGIN;
let map = new Map()
map.set('username',phone);
map.set('password',pwd);
let sx = Util.maptoJson(Util.tokenAndKo(map));
NetUitl.postFrom(url,sx,function (set){
switch (set.retCode) {
case "0000":
alert("登录成功");
break;
case "0001":
alert("登录失败");
break;
default:
alert("登录失败");
}
});我们发现,其封装逻辑,跟我们处理原生的思想差不多,只不过是换了种方式而已。只要你掌握了基础,相信处理这些都不是很难的事情。
总结
react相比vue要复杂些,所以大家有多花点时间去研究和学习;建议大家两者都要学会,毕竟您现在找工作的话,也不知道公司是用的哪种框架,加油咯!!
相关推荐
- select元素样式化:在本机选择元素和自定义选择元素之间取得平衡 - Web前端
- 使用图像处理优化网站媒体的4个理由 - Web前端
- Web前端开发:跨域XMLHttpRequest处理 - Web前端
- Web前端开发:分享react里的form表单“秘方” - Web前端
- 原生JS发送HTTP请求的方式:XMLHttpRequest.send() - Web前端
- AWS推出了无代码应用构建服务Amazon Honeycode - Web前端
- 深入了解下JavaScript与JSON之间的一些事情 - Web前端
- 初识REST和RESTful API并带您学会编写API - Web前端
- 竞争激烈导致谷歌云关闭“独立区域”项目? - Web前端
- 改变this指向"二人组":apply()和call() - Web前端
- 网页前端技术排行
-
- 1[Web前端]用javascript实现默认图片替代未显示的图片 - Web前端
- 2分析Iconfont-阿里巴巴矢量常用图标库 - Web前端
- 3jQuery实例教程:制作网页中可折叠的面板 - Web前端
- 4【第六章】Foundation之按钮和下拉功能 - Web前端
- 5基于jquery的滚动条滚动固定div(附演示下载) - Web前端
- 6jQuery编写widget的一些技巧分享 - Web前端
- 7分享精心挑选的12款优秀jQuery Ajax分页插件和教程 - Web前端
- 8jQuery实现鼠标移到元素上动态提示消息框效果 - Web前端
- 9在Mac/PC上远程调试iPhone/iPad上的网页 - Web前端
- 最近发表
-
- WordPress随机显示特色图片插件:Random Post Thumbnails
- KeePass实现Chrome浏览器自动填充密码方法一
- LNMP一键包nginx 301强制跳转到https教程
- KeePass实现Chrome浏览器自动填充密码方法二
- #建站# 免费的VPS管理软件Xshell8/Xftp8中文版下载
- 使用Xshell 8连接VPS教程_电脑登录vps的方法
- WordPress评论界面添加烟花????效果
- 不同浏览器书签同步方案:坚果云+Floccus_详细使用教程
- iOS端KeePassXC客户端APP:Strongbox Password Safe
- 给WordPress评论中的Gravatar头像图片添加ALT属性


