详解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 相关文章推荐
Jquery 组合form元素为json格式,asp.net反序列化
Jul 09 Javascript
解决表单中第一个非隐藏的元素获得焦点的一个方案
Oct 26 Javascript
Ajax+Json 级联菜单实现代码
Oct 27 Javascript
select标记美化--JS式插件、后期加载
Apr 01 Javascript
js随机生成网页背景颜色的方法
Feb 26 Javascript
jQuery Validate初步体验(二)
Dec 12 Javascript
JavaScript实现鼠标点击导航栏变色特效
Feb 08 Javascript
JS手机端touch事件计算滑动距离的方法示例
Oct 26 Javascript
基于jquery实现五星好评
Nov 18 jQuery
node.JS事件机制与events事件模块的使用方法详解
Feb 06 Javascript
关于IDEA中的.VUE文件报错 Export declarations are not supported by current JavaScript version
Oct 17 Javascript
微信小程序实现点赞业务
Feb 10 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一句话cmdshell新型 (非一句话木马)
2009/04/18 PHP
全世界最小的php网页木马一枚 附PHP木马的防范方法
2009/10/09 PHP
CI框架的安全性分析
2016/05/18 PHP
浅谈PHP值mysql操作类
2016/06/29 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
2017/02/08 PHP
简单的php购物车代码
2020/06/05 PHP
PHP sdk文档处理常用代码示例解析
2020/12/09 PHP
JavaScript 精粹读书笔记(1,2)
2010/02/07 Javascript
js 定时器setTimeout无法调用局部变量的解决办法
2013/11/28 Javascript
javascript eval(func())使用示例
2013/12/05 Javascript
解析jquery中的ajax缓存问题
2013/12/19 Javascript
JavaScript实现的多种鼠标拖放效果
2015/11/03 Javascript
JS组件Bootstrap Select2使用方法解析
2016/05/30 Javascript
jQuery Chart图表制作组件Highcharts用法详解
2016/06/01 Javascript
jQuery基于toggle实现click触发DIV的显示与隐藏问题分析
2016/06/12 Javascript
微信小程序 request接口的封装实例代码
2017/04/26 Javascript
用React-Native+Mobx做一个迷你水果商城APP(附源码)
2017/12/25 Javascript
javaScript 实现重复输出给定的字符串的常用方法小结
2020/02/20 Javascript
redux处理异步action解决方案
2020/03/22 Javascript
详解JavaScript中的Object.is()与"==="运算符总结
2020/06/17 Javascript
Vue使用CDN引用项目组件,减少项目体积的步骤
2020/10/30 Javascript
python实现在每个独立进程中运行一个函数的方法
2015/04/23 Python
python用户评论标签匹配的解决方法
2018/05/31 Python
python SQLAlchemy的Mapping与Declarative详解
2019/07/04 Python
keras CNN卷积核可视化,热度图教程
2020/06/22 Python
基于python调用jenkins-cli实现快速发布
2020/08/14 Python
HTML5 body设置自适应全屏
2020/05/07 HTML / CSS
全国道德模范事迹
2014/02/01 职场文书
竞聘书格式及范文
2014/03/31 职场文书
小学生新年寄语
2014/04/03 职场文书
大学生求职信范文
2014/05/24 职场文书
试用期自我评价怎么写
2015/03/10 职场文书
大队委员竞选演讲稿
2015/11/20 职场文书
工作报告范文
2019/06/20 职场文书
神州牡丹园的导游词
2019/11/20 职场文书
《勇者辞职不干了》上卷BD发售宣传CM公开
2022/04/08 日漫