react-native Fetch的封装

本文介绍了如何使用React Native的fetch API进行网络请求,并进行了封装。通过设置POST请求,配置headers及处理响应数据,实现了一个基础的网络请求库。

react-native Fetch的封装

 xhr(url, params) {
        try {
            console.log('url:', url, 'params:', params);
            if (params) {
            } else {
                var params = {};
            }
            //    console.log(params)
            return new Promise((resolve, reject) => {
                fetch(url, {
                    method: 'POST', //定义请求方式,POST、GET、PUT等
                    headers: {
                        'Accept': 'application/json', // 提交参数的数据方式,这里以json的形式
                        'Content-Type': 'application/json',
                        "Connection": "keep-Alive"
                    },
                    body: JSON.stringify(params), //提交的参数
                })
                    .then(response => response.json()) //数据解析的方式,json解析
                    .then(response => {
                        // var res = responseJson.code; //返回直接映射完的数据,可以直接使用
                        resolve(response);
                        // alert(JSON.stringify(responseJson))
                    }).catch((error) => {
                       
                    // Alert.alert('warning', 'Get Data Fail, Please Try Again!')
                    console.log(error);
                }).done();
            });
        }catch (e){
           
        }
    }
React Native 中,`fetch` 是一个基于 Promise 的网络请求 API,用于发起 HTTP 请求,支持 `GET`、`POST` 等常见方法,并具备良好的异步处理能力。它符合 Web 标准,是官方推荐的基础网络请求方案。 ### 发起 GET 请求 使用 `fetch` 发起 GET 请求非常简单,只需要传入目标 URL 即可。响应数据通常通过 `.json()` 或 `.text()` 方法解析: ```javascript fetch('https://api.example.com/data') .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('Error:', error)); ``` 该方式适用于获取 JSON 格式或纯文本数据。若响应内容较大,也可以使用 `response.text()` 来处理流式文本 [^1]。 ### 发起 POST 请求 对于 POST 请求,除了指定 `method` 为 `'POST'`,还需要设置 `headers` 和 `body`。例如,发送 JSON 格式的数据: ```javascript fetch('https://api.example.com/endpoint', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ key: 'value', }), }); ``` 这种方式广泛用于向后端提交表单数据或进行身份验证操作 [^1]。 ### 处理请求超时 默认情况下,`fetch` 请求没有内置的超时机制,这在实际应用中可能导致用户体验不佳。为解决这一问题,可以通过封装一个具有超时控制的 `fetch` 方法,利用 `Promise.race` 实现超时逻辑: ```javascript const timeoutFetch = (url, options, timeout = 5000) => { const controller = new AbortController(); const { signal } = controller; const fetchPromise = fetch(url, { ...options, signal }); const timeoutPromise = new Promise((_, reject) => { setTimeout(() => { controller.abort(); reject(new Error('请求超时')); }, timeout); }); return Promise.race([fetchPromise, timeoutPromise]); }; // 使用示例 timeoutFetch('https://api.example.com/data') .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('Error:', error)); ``` 此方法在 Android 和 iOS 上均适用,可有效提升网络请求的可控性 [^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值