详解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 相关文章推荐
Javascript中的数学函数
Apr 04 Javascript
JavaScript 利用Cookie记录用户登录信息
Dec 08 Javascript
Jquery ajaxsubmit上传图片实现代码
Nov 04 Javascript
Extjs4.0设置Ext.data.Store传参的请求方式(默认为GET)
Apr 02 Javascript
什么是Node.js?Node.js详细介绍
Jun 01 Javascript
Javascript中arguments和arguments.callee的区别浅析
Apr 24 Javascript
js密码强度校验
Nov 10 Javascript
JavaScript模版引擎的基本实现方法浅析
Feb 15 Javascript
javascript实现二叉树遍历的代码
Jun 08 Javascript
微信小程序报错:this.setData is not a function的解决办法
Sep 27 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
Feb 11 Javascript
vue 实现走马灯效果
Oct 28 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
索尼ICF-SW100收音机评测
2021/03/02 无线电
php float不四舍五入截取浮点型字符串方法总结
2013/10/28 PHP
PHP的error_reporting错误级别变量对照表
2014/07/08 PHP
php操作xml入门之xml标签的属性分析
2015/01/23 PHP
WAMP环境中扩展oracle函数库(oci)
2015/06/26 PHP
PHP连续签到功能实现方法详解
2019/12/04 PHP
Avengerls vs Newbee BO3 第二场2.18
2021/03/10 DOTA
javascript 一些用法小结
2009/09/11 Javascript
从零开始学习jQuery (三) 管理jQuery包装集
2011/02/23 Javascript
Javascript 倒计时源代码.(时.分.秒) 详细注释版
2011/05/09 Javascript
js获取url参数代码实例分享(JS操作URL)
2013/12/13 Javascript
Javascript中对象继承的实现小例
2014/05/12 Javascript
js删除Array数组中指定元素的两种方法
2016/08/03 Javascript
修改Jquery Dialog 位置的实现方法
2016/08/26 Javascript
实例分析浏览器中“JavaScript解析器”的工作原理
2016/12/12 Javascript
Cookies 和 Session的详解及区别
2017/04/21 Javascript
Vue.js上下滚动加载组件的实例代码
2017/07/17 Javascript
label+input实现按钮开关切换效果的实例
2017/08/16 Javascript
面包屑导航详解
2017/12/07 Javascript
详解js实时获取并显示当前时间的方法
2019/05/10 Javascript
Python实现查找匹配项作处理后再替换回去的方法
2017/06/10 Python
python3.4用函数操作mysql5.7数据库
2017/06/23 Python
利用python打开摄像头及颜色检测方法
2018/08/03 Python
Python 中的 import 机制之实现远程导入模块
2019/10/29 Python
Python语言异常处理测试过程解析
2020/01/08 Python
python轮询机制控制led实例
2020/05/03 Python
Python如何telnet到网络设备
2021/02/18 Python
CSS3的常见transformation图形变化用法小结
2016/05/13 HTML / CSS
使用HTML5的Notification API制作web通知的教程
2015/05/08 HTML / CSS
医药专业推荐信
2013/11/15 职场文书
父母对孩子说的话
2014/04/12 职场文书
环境保护与污染治理求职信
2014/07/16 职场文书
春游踏青活动方案
2014/08/14 职场文书
市级三好学生评语
2014/12/29 职场文书
高校自主招生校长推荐信
2015/03/23 职场文书
react 路由Link配置详解
2021/11/11 Javascript