react native 网络请求工具类的封装

React-Native傻瓜式学习笔记(三):基于事件发布/订阅的网络请求工具类封装 最近国内外使用React-Native写APP的公司越来越多了,我们公司也不甘落后,将使用React-Native重写APP这个事提上了日程。然而这个任务落到我头上的时候,我本人作为一个Android菜鸡程序猿当即表示“臣妾做不到啊~”,然而并没有什么卵用。没办法,只好硬着头皮现学现卖。这东西刚出时间并不算长,网上完整的系统的参考文章较少,多数都是零碎的知识点,只好在博客里做个笔记,省得忘了以后再去 阅读详情

React native

React Native 提供了和 web 标准一致的Fetch API,用于满足开发者访问网络的需求,下面提供直接封装一个网络请求。

新建一个FetchManager.js文件,内容如下

import {
    Alert,
    ToastAndroid,
    NativeModules
} from 'react-native'


export default class FetchManager {

    /** * GET 请求 */
    static get(url, params, success, fail, error) {
        if (params) {
            let paramsArray = [];
            //拼接参数
            Object.keys(params).forEach(key => paramsArray.push(key + '=' + params[key]))
            if (url.search(/\?/) === -1) {
                url += '?' + paramsArray.join('&')
            } else {
                url += '&' + paramsArray.join('&')
            }
        }
        fetch(url, {
            headers: {
                //看后台需求决定配置参数,例如我们后台要求将appId放在这里请求
                // appId: '1234345656'
            },
        })
            .then(response => response.json())
            //把response转为json
            .then(responseJson => {
                // 拿到上面的转好的json
                //根据实际的请求回来格式来处理回调
                if (responseJson['success'] === true) {
                    // 0为请求成功
                    success && success(responseJson)
                } else {
                    fail && fail(responseJson)
                    //可以处理返回的错误信息
                }
            }).catch(e => {
            console.log(e)
            error && error(e)
        })
    }


    /** * POST 请求,经测试用FormData传递数据也可以 ,支持跨域与CooKie传递*/
    static post(url, formData, success, fail, error) {
        fetch(url, {
            credentials: 'include',
            method: 'POST',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'multipart/form-data',
                // 'Content-Type': 'application/x-www-form-urlencoded'
                // 'Cookie': ''
            },
            mode: "cors",
            body: formData
        }).then(response => response.json())
        //把response转为json
            .then(responseJson => {

                // 拿到上面的转好的json
                //根据实际的请求回来格式来处理回调

                if (responseJson['success'] === true) {
                    // 0为请求成功
                    success && success(responseJson)
                } else {
                    fail && fail(responseJson)
                    //可以处理返回的错误信息
                }
            }).catch(e => {
            console.log(e)
            error && error(e)
        })
    }

    /** * POST 请求,经测试用FormData传递数据也可以 Json格式 */
    static postJson(url, params, success, fail, error) {
        fetch(url, {
            credentials: 'include',
            method: 'POST',
            headers: {
                'Accept': '*/*',
                //媒体格式类型key/value格式
                // 'Accept': 'application/json;charset=UTF-8',
                'Content-Type': 'application/json;charset=UTF-8'
            },
            //mode:"cors",
            body: JSON.stringify(params)
        }).then(response => response.json())
        //把response转为json
            .then(responseJson => {
                // 拿到上面的转好的json
                //根据实际的请求回来格式来处理回调
                if (responseJson['success'] === true) {
                    // 0为请求成功
                    success && success(responseJson)
                } else {
                    fail && fail(responseJson)
                    //可以处理返回的错误信息
                }
            }).catch(e => {
            console.log(e)
            error && error(e)
            ToastUtil.show("请检查您的网络是否已经连接");
        })
    }

    /** * @images uri数组 * @param FormData格式,没有参数的话传null */
    static uploadFile(url, images, params, success, fail, error) {
        let formData = new FormData();
        if (params) {
            formData = params;
        }
        for (let i = 0; i < images.length; i++) {
            let uri = images[i]
            let date = new Date()
            let name = date.getTime() + '.png'
            //用时间戳保证名字的唯一性
            let file = {
                uri: uri,
                type: 'multipart/form-data',
                name: name
            }
            formData.append('file', file)
        }
        fetch(url, {
            method: 'POST', headers: {
                'Accept': 'application/json',
                //媒体格式类型key/value格式
                'Content-Type': 'multipart/form-data',
                // customerId: customerId,
                // appId: appId
            }, body: formData
        }).then(response => response.json())
        //把response转为json
            .then(responseJson => {
                // 拿到上面的转好的json
                //根据实际的请求回来格式来处理回调
                if (responseJson['success'] === true) {
                    // 0为请求成功
                    success && success(responseJson)
                } else {
                    fail && fail(responseJson)
                    //可以处理返回的错误信息
                }
            }).catch(e => {
            console.log(e)
            error && error(e)
        })
    }
}

使用步骤

在其他js文件内直接调用

import React from 'react';
import FetchManager from './FetchManager'

export class Test extends React.Component {

componentDidMount(): void {
       let url = '填上你的请求url地址';
       let formData = new FormData();
       formData.append("id", 'id');
       FetchManager.post(url, formData, (json) => {
          //TODO成功回调
       }, (json) => {
          //TODO失败回调
       }, (e) => {
          //TODO错误回调
       });
}

render(): React.ReactNode {
        return (
            <View>
                <Text>测试</Text>
            </View>
       );


}

结语

欢迎大家拍砖点赞分析收藏,谢谢大家。

 

 

 

React Native 基础之网络请求 React Native 提供了和 web 标准一致的Fetch API,用于满足开发者访问网络的需求。 Fetch 语法 使用 fetch 的构造函数请求数据后,返回一个 Promise 对象,然后根据具体的实际情况处理。 fetch("http://baidu.com") .then(function(response){ // ... }) 说明: 在请求后的 Respons... 阅读详情

相关推荐

9.React Native之Fetch网络请求封装;

目录 1.Fetch介绍 2.fetch参数介绍 2.1Request 2.2Headers 2.3Response 2.4Body 3.Fetch使用介绍 3.1上传JSON 4.fetch封装 1.Fetch介绍 Fetch核心在于对HTTP的抽象,包括 Request,Response,Headers,Body,以及用于初始化异步请求的 global fetch。Fet...

Tiger的专栏 2074

【React Native】从React开始——网络请求之axios

文章目录1. 前言1.1 promise 是什么?2. axios2.1 解决跨域问题2.2 Get请求 1. 前言 偶然看到了这个axios这个框架,当然也找到了一个官方的文档说明。 Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。 了解一些前端开发的大多都使用过AJAX来进行网络请求,那么为什么还需要axios这个库。我们知道AJAX的引入是为了页面的局部刷新,即:AJAX = 异步 JavaScript 和 XML(Asynchronous Java

梦否 5709

React Native探索(五)使用fetch进行网络请求

React Native可以使用多种方式来请求网络,比如fetch、XMLHttpRequest以及基于它们封装的框架,fetch可以说是替代XMLHttpRequest的产物,这一节我们就来学习fetch的基本用法。

Android进阶三部曲 - 刘望舒 1万+

react native 开发框架,封装网络请求,自定义控件,常用工具类

easier-react-native框架 https://github.com/sincethere/easier-react-native/ 使用说明 ** 注意:react-native 需大于或等于 v0.25 ** 安装命令: $ npm install easier-react-native --save 或者直接克隆到node_modules目录下

大灰狼的小绵羊哥哥的博客 1127

react native axios 封装组件

一、最近在研究react native的网络请求,然后自己封装了一个来练习1.添加axios 和querystring依赖yarn add axios &amp;&amp; yarn add querystring2.新建 src/common/httpBaseConfig.js3.新建 src/utils/http/index.jsimport axios from 'axios';import...

sinat_33134895的博客 5762

网络请求与本地存储:Axios 与 AsyncStorage 在 React Native 中的应用

网络请求与本地存储:Axios与AsyncStorage在React Native中的应用 本文探讨React Native应用中网络请求和本地存储的实现方案,重点介绍Axios和AsyncStorage的使用方法。Axios作为强大的HTTP客户端,简化了GET/POST等请求操作,支持全局配置和错误处理。AsyncStorage则提供本地数据持久化功能,适合存储登录状态等小型数据。 核心要点: Axios优化API请求:通过全局封装统一管理请求,实现接口缓存减少网络负载 健壮的错误处理:包括全局错误拦

zimin的专栏 1944

React Native 网络请求封装:使用Promise封装fetch请求

React Native中虽然也内置了XMLHttpRequest 网络请求API(也就是俗称的ajax),但XMLHttpRequest 是一个设计粗糙的 API,不符合职责分离的原则,配置和调用方式非常混乱,而且基于事件的异步模型写起来也没有现代的 Promise 友好。而Fetch 的出现就是为了解决 XHR 的问题,所以ReactNative官方推荐使用Fetch API。http

大灰狼的小绵羊哥哥的博客 1万+

react-native之上拉加载,下拉刷新组件封装

react-native 自定义封装刷新组件几个月没写博客了,最近一直在写react 和react-native,前几天刚发了一版基于react-native混合开发的App,这几天赶快总结下。写过java的同学,再去学习react和react-native就会比较容易上手,并且会有一种似曾相识的感觉,不错,今天我要总结的刷新就是和Android原生的刷新很类似的一种实现,在Android原生当中,

dachaoxuexi的博客 6404

ReactNative的网络请求封装

在上文总结ReactNative一些基础知识简单看了下官网的网络请求的方法,通过官网文档再结合项目中实际情况,就可以封装出一个RN的网络请求来。 接口 首先准备个接口,请求参数为 | 参数名 | 默认值 | 描述 | | :—–: | :—–: | :—-: | | methodName | ArticleTop | ...

Goach的专栏 1240

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

本篇文章主要介绍了详解React Native网络请求fetch简单封装,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

CCS配置MSPM0G3507(七) 编码器(TIMER-QEI)

1.选择时钟源 BUSCLK2.时钟分频配置为1分频3.分频系数配置为14.若勾选 Start ,则生成程序后会自动开启定时器的计数,否则需手动在程序中开启5.Load Value 设置为65535。

kaneki_lh的博客 1万+

RN实战项目网络请求封装(二)

RN实战项目网络请求封装(二)网络相关学习文档,参考 RN中文网文档RN中主要是用fetch来完成异步网络请求的,传统的ajax慢慢的会被fetch替代RN中文网fetch API 案例fetch('https://mywebsite.com/endpoint/', { method: 'POST', //请求方法 默认get headers: { 'Accept': 'appli

kimi 4033

全网首发:香橙派5MAX安装ubuntu20.04(换了官方桌面)及ros,运行LIVOX-mid360混合固态激光雷达,实际测试fastlio(只能说可以跑,还是有点吃力)

独家发布!!!香橙派5MAX安装ubuntu20.04(换了官方桌面)及ros,运行mid360混合固态激光雷达,测试fastlio(只能说可以跑,还是有点吃力),国货也算崛起了。

2402_82745259的博客 5998

React Native 入门(十二) - Fetch 网络请求

不知不觉中,RN 0.50 已经发布了。两个多礼拜没有接触 RN 了,已经忘得差不多了,赶紧再恶补一下写写博客,否则真的会忘得一干二净。这篇文章简单介绍 RN 中的网络请求。使用 FetchFetch 使用起来很简单,只需要简单的一行代码就可以实现网络请求:fetch(url)它还可以有第二个可选的参数,用来进行请求的配置。

王小北的技术博客 5892

【2026年华为暑期实习(AI)-4月8日-第一题- 选择题】(题目+思路+Java&C++&Python解析+在线测试)

答案与解析 1. 相关系数问题 答案:C. 完全负线性相关 解析:相关系数ρ=-1表示X和Y之间存在完全负线性相关关系,所有数据点都严格落在一条斜率为负的直线上。 2. 矩阵秩问题 答案:B. Σ的对角线上非零奇异值的个数 解析:矩阵A的秩等于其奇异值矩阵Σ中非零奇异值的个数,因为U和V都是正交矩阵,不改变矩阵的秩。 3. 条件概率问题 答案:B. 0.5 解析:根据全概率公式和贝叶斯公式计算,P(B)=0.5×0.4+0.3×0.6=0.38,P(A|B)=(0.5×0.4)/0.38≈0.526,最接近

m0_73659489的博客 287

ARM CoreLink 系列 5.1.1 -- CI-700 System Address Map 】

所有的CHI 命令都包含一个 Source ID 和 Target ID, 其中 Source ID 可以来自于 RN Node, Target ID 可以来自于HN node或者其他 SN node. 其中 Target ID 是通过 SAM解析传入的地址得到的。对于 CI-700中的所有 RN Node 中的 SAM 多会进行配置,因为RN Node 访问的是整个地址空间,不同的地址空间会有不同的属性(I/O, DRAM),所以会对RN SAM 配置多个不同属性的区域。

CodingCos的博客 771

RN笔记-项目教程与源码分享

此文适合react-native新手学习使用,侧重点在于Fetch网络请求、ListView数据源配置及展示。 项目中使用豆瓣网提供的开放数据接口 http://www.jianshu.com/p/c5160fda1d38 Util工具类封装 Util工具类封装了获取设备屏幕宽高、网络请求成功或者失败回调函数、数据请求成功前的等待效果. /* 工具类 */

大灰狼的小绵羊哥哥的博客 2255

21、深入了解SELinux安全系统与/proc文件系统

本文深入探讨了SELinux安全系统与/proc文件系统的原理及实际应用。详细介绍了SELinux的安全上下文、域转换、运行模式、角色管理以及策略查看工具seinfo的使用;同时解析了/proc文件系统的结构与功能,涵盖进程信息查看、系统资源监控及性能优化方法。结合SELinux与/proc的协同应用,提供了系统问题排查流程与安全管理最佳实践,帮助用户提升Linux系统的安全性与稳定性。

ik678901234的博客 62

react native 使用fetch进行网络请求(https),解决SSLHandshake问题,以及怎样进行二次封装

react native 使用fetch进行网络请求(https 问题SSLHandshake,解决办法) 使用实例demo 怎样进行封装 常见问题(超时设置、无效的ssl证书、header…) fetch原理讲解 使用实例1.使用get方式进行网络请求,例如:fetch('http://nero-zou.com/test', { method: 'GET' }).then(function(respo

qq_16086969的专栏 2万+

在线考试题库抓取:Python 爬虫抓取各类在线考试平台题库和试题

通过这些技术,您可以抓取各类在线考试平台上的题库数据,进行数据分析、生成练习题集,甚至用于考试准备。为了演示抓取过程,本篇博客选择了两个常见的在线考试平台进行数据抓取:一个是教育考试平台(如“中小学题库”),另一个是职业考试平台(如“华图教育”)。对于这些网站,我们需要找到包含题库信息的页面,并分析每一页的 HTML 结构,从而定位到题目、选项、答案等数据。大多数在线考试平台的题库是分页显示的,因此我们需要遍历多个页面,抓取所有的题库数据。因此,我们需要设置合适的请求头来模拟真实的浏览器请求。

2201_76125261的博客 3443

基于STM32设计的4G远程视频侦查小车(图传+远程控制+EMQX+MQTT)(204)

当前设计了一款基于STM32F103ZET6主控芯片和废旧Android手机改造的4G侦查小车。该设计充分利用已有的智能手机硬件资源,实现摄像头画面的实时采集与上传,以及远程控制功能。这样的设计不仅降低了成本,而且充分利用了废旧手机中高性能的硬件资源,如摄像头、4G通信模块和电池等,实现了资源的有效循环利用。

2533

react native 开发APP(六)网络请求,列表的使用

官网 https://reactnative.cn/ 项目下载地址:https://github.com/hebiao6446/DemoProject 陆续更新中。。。 在移动端开发的时候,我们基本上都会用到列表, React native iOS Android ListView UITableView RecyclerView 说到列表,那么必然跟网络请求有关系,网络这块...

chmod_R_755的专栏 1359

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

react多个网络请求_React Native 网络请求方法

前言React Native逻辑部分使用javascript引擎作为支撑,因此,原则上我们可以使用ServerSent、Ajax、WebSocket请求以及ES6。Fetch网络请求Fetch是为了改善Ajax处理逻辑而推出新的请求api,具体使用请参考(Using Fetch Api)要从任意地址获取内容的话,只需简单地将网址作为参数传递给fetch方法即可(fetch这个词本身也就是【获取】的...

weixin_35158450的博客 554

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

React Native网络请求与数据处理:Axios、Fetch与状态管理全攻略

React Native作为一款流行的跨平台移动应用开发框架,其网络请求与数据处理能力直接影响应用性能和用户体验。本文将全面解析React Native中网络请求的两种主流方案(Axios与Fetch)以及高效状态管理策略,帮助开发者构建响应式强、性能优的移动应用。 ## 一、React Native网络请求核心方案对比 ### 1.1 Fetch API:原生内置的轻量级方案 Fetch

gitblog_00422的博客 1095

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

React Native Fetch请求设置超时

本文在简书同步更新:https://www.jianshu.com/p/2df7c6e3b3c3 React Native的fetch请求本身自带的超时时间比较长,也不能自定义超时时间,除非修改源码(Android底层是由OkHttp实现)。在实际的App网络连接当中,用户是接受不了那么长的网络超时的,所以我们得自己封装一个。在这里我们可以合理使用Promise来解决这个问题。 一、Promi...

weixin_42516118的博客 2068
上一篇: react-native-code-push在Android上的更新流程
下一篇: react native TabBar的封装及使用
JosonChou
博客等级 码龄11年 8粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值