详解React Native网络请求fetch简单封装


Posted in Javascript onAugust 10, 2017

在原生应用开发中,为了方便业务开发人员使用,我们一般会对网络库进行一些上传封装,而不是直接使用,例如基于AFNetworking库的iOS请求上层封装,Android的诸如volley,retrofit等。在前端开发中,一般使用fetch进行网络请求,相关介绍请查看fetch示例。其实对于开发来说,系统提供的fetch已经够用了,但是为了代码的整体结构,建议对fetch进行简单的Get/Post封装。

若不封装,我们看一下传统的写法:

fetch('http://www.pintasty.cn/home/homedynamic', {
      method: 'POST',
      headers: { //header
        'token': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJVLTliZGJhNjBjMjZiMDQwZGJiMTMwYWRhYWVlN2FkYTg2IiwiZXhwaXJhdGlvblRpbWUiOjE0NzUxMTg4ODU4NTd9.ImbjXRFYDNYFPtK2_Q2jffb2rc5DhTZSZopHG_DAuNU'
      },
      body: JSON.stringify({ //参数
        'start': '0',
        'limit': '20',
        'isNeedCategory': true,
        'lastRefreshTime': '2016-09-25 09:45:12'
      })
    })
      .then((response) => response.json()) //把response转为json
      .then((responseData) => { // 上面的转好的json
          alert(responseData); /
        // console.log(responseData);
      })
      .catch((error)=> {
        alert('错误了');
      })
  }

是不是看着有一种密集恐惧症,并且代码的风格也不是很好。所以,为了方便使用,我们需要将公共的部分封装起来,然后只需要通过参数的方式对外暴露出诸如请求Url,请求参数,Header就可以了。

var HTTPUtil = {};

/**
 * GET请求
 */
HTTPUtil.get = function(url, params, headers) {
  if (params) {
    let paramsArray = [];
    //encodeURIComponent
    Object.keys(params).forEach(key => paramsArray.push(key + '=' + params[key]))
    if (url.search(/\?/) === -1) {
      url += '?' + paramsArray.join('&')
    } else {
      url += '&' + paramsArray.join('&')
    }
  }
  return new Promise(function (resolve, reject) {
   fetch(url, {
      method: 'GET',
      headers: headers,
     })
     .then((response) => {
       if (response.ok) {
         return response.json();
       } else {
         reject({status:response.status})
       }
     })
     .then((response) => {
       resolve(response);
     })
     .catch((err)=> {
      reject({status:-1});
     })
  })
}


/**
 * POST请求 FormData 表单数据
 */
HTTPUtil.post = function(url, formData, headers) {
  return new Promise(function (resolve, reject) {
   fetch(url, {
      method: 'POST',
      headers: headers,
      body:formData,
     })
     .then((response) => {
       if (response.ok) {
         return response.json();
       } else {
         reject({status:response.status})
       }
     })
     .then((response) => {
       resolve(response);
     })
     .catch((err)=> {
      reject({status:-1});
     })
  })
}

export default HTTPUtil;

还是上面的例子,我们怎么使用呢?

let formData = new FormData(); 
formData.append("id",1060); 
 let url='http://www.pintasty.cn/home/homedynamic';
  let headers='';
HTTPUtil.post(url,formData,headers).then((json) => { 
  //处理 请求结果 
  },(json)=>{ 
   //TODO 处理请求fail   
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
IE 缓存策略的BUG的解决方法
Jul 21 Javascript
基于jquery的自定义鼠标提示效果 jquery.toolTip
Nov 14 Javascript
jQuery Ajax提交表单查询获得数据实例代码
Sep 19 Javascript
用innerhtml提高页面打开速度的方法
Aug 02 Javascript
JS中判断null、undefined与NaN的方法
Mar 26 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【二】
May 10 Javascript
使用jquery获取url及url参数的简单实例
Jun 14 Javascript
jQuery基于ID调用指定iframe页面内的方法
Jul 06 Javascript
实现JavaScript高性能的数据存储
Dec 11 Javascript
jQuery对table表格进行增删改查
Dec 22 Javascript
详解webpack之图片引入-增强的file-loader:url-loader
Oct 08 Javascript
vue2之简易的pc端短信验证码的问题及处理方法
Jun 03 Javascript
jQuery Ajax 实现分页 kkpager插件实例代码
Aug 10 #jQuery
JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结
Aug 10 #Javascript
jquery.uploadView 实现图片预览上传功能
Aug 10 #jQuery
express框架实现基于Websocket建立的简易聊天室
Aug 10 #Javascript
bootstrap table服务端实现分页效果
Aug 10 #Javascript
AngularJs+Bootstrap实现漂亮的计算器
Aug 10 #Javascript
React-Native做一个文本输入框组件的实现代码
Aug 10 #Javascript
You might like
php页面跳转代码 输入网址跳转到你定义的页面
2013/03/28 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
2015/12/18 PHP
javascript AutoScroller 函数类
2009/05/29 Javascript
Jquery中增加参数与Json转换代码
2009/11/20 Javascript
jQuery Selector选择器小结
2010/05/06 Javascript
基于jQuery替换table中的内容并显示进度条的代码
2011/08/02 Javascript
用jquery统计子菜单的条数示例代码
2013/10/18 Javascript
JQuery文字列表向上滚动的代码
2013/11/13 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
2013/12/26 Javascript
angularjs中的单元测试实例
2014/12/06 Javascript
JavaScript判断一个字符串是否包含指定子字符串的方法
2015/03/18 Javascript
javascript实现下班倒计时效果的方法(可桌面通知)
2015/07/10 Javascript
正则表达式,替换所有HTML标签的简单实例
2016/11/28 Javascript
解决nodejs中使用http请求返回值为html时乱码的问题
2017/02/18 NodeJs
Angular2学习教程之TemplateRef和ViewContainerRef详解
2017/05/25 Javascript
JS解析url查询参数的简单代码
2017/08/06 Javascript
前端开发不得不知的10个最佳ES6特性
2017/08/30 Javascript
vue导出html、word和pdf的实现代码
2018/07/31 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
解决JavaScript中0.1+0.2不等于0.3问题
2018/10/23 Javascript
深入探索VueJS Scoped CSS 实现原理
2019/09/23 Javascript
使用python 获取进程pid号的方法
2014/03/10 Python
python将每个单词按空格分开并保存到文件中
2018/03/19 Python
python+Django实现防止SQL注入的办法
2019/10/31 Python
简单了解python数组的基本操作
2019/11/26 Python
基于python3生成标签云代码解析
2020/02/18 Python
python烟花效果的代码实例
2020/02/25 Python
python如何保存文本文件
2020/06/07 Python
Hotels.com中国区:好订网
2016/08/18 全球购物
加拿大时尚潮流大码女装购物网站:Addition Elle
2018/04/02 全球购物
介绍一下SOA和SOA的基本特征
2016/02/24 面试题
银行自荐信范文
2013/10/07 职场文书
办公室文员工作自我评价
2013/12/01 职场文书
运动会800米加油稿
2014/02/22 职场文书
商务司机岗位职责
2015/04/10 职场文书
win10电脑双屏显示一个黑屏怎么办?win10电脑双屏显示一个黑屏解决方法
2022/07/15 数码科技