React Native中的网络请求fetch和简单封装

React Native中的网络请求fetch使用方法最为简单,但却可以实现大多数的网络请求,需要了解更多的可以访问:

https://segmentfault.com/a/1190000003810652

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/**
  * Sample React Native App
  * https://github.com/facebook/react-native
  * 周少停 2016-09-28
  * fetch请求数据 header 参数 response转json 请求方式
  */
 
 
import  React, {Component} from  'react' ;
import  {
     AppRegistry,
     StyleSheet,
     Text,
     View,
     TouchableOpacity
} from  'react-native' ;
 
var  Project = React.createClass({
     render() {
         return  (
             <View style={styles.container}>
                 <TouchableOpacity onPress={ this .ssss}>
                     <Text>访问</Text>
                 </TouchableOpacity>
             </View>
         );
     },
     ssss(){
         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( '错误了' );
             })
     }
});
 
const styles = StyleSheet.create({
     container: {
         flex: 1,
         justifyContent:  'center' ,
         alignItems:  'center' ,
         backgroundColor:  '#F5FCFF'
     }
});
 
AppRegistry.registerComponent( 'Project' , () => Project);

fetch是人家已经封装好,再度封装只是基于自己项目进行的封装,这里只是基于公司项目实现一下,讲解一下回调:

封装实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/**
  * NetUitl 网络请求的实现
  * https://github.com/facebook/react-native
  */
import  React, { Component } from  'react' ;
import  {
     AppRegistry,
     StyleSheet,
     Text,
     View,
     ListView,
     Image,
     TouchableOpacity,
     Platform,
     AsyncStorage
} from  'react-native' ;
 
class  NetUitl  extends  React.Component{
     /*
      *  get请求
      *  url:请求地址
      *  data:参数
      *  callback:回调函数
      * */
     static  get(url,params,callback){
         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请求
         fetch(url,{
             method:  'GET' ,
         })
             .then((response) => {
                 callback(response)
             }).done();
     }
     /*
      *  post请求
      *  url:请求地址
      *  data:参数
      *  callback:回调函数
      * */
     static  post(url,params,headers,callback){
         //fetch请求
         fetch(url,{
             method:  'POST' ,
             headers:{
                 'token' : headers
             },
             body:JSON.stringify(params)
         })
             .then((response) => response.json())
             .then((responseJSON) => {
                 callback(responseJSON)
             }) .done();
     }
 
 
 
}
 
module.exports = NetUitl;

调用:

1
2
3
4
5
6
7
8
9
10
11
12
13
rightAction(){
     let  params = { 'start' : '0' ,limit: '20' , 'isNeedCategory' true 'lastRefreshTime' '2016-09-25 09:45:12' };
     NetUitl.post( 'http://www.pintasty.cn/home/homedynamic' ,params, 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJVLTliZGJhNjBjMjZiMDQwZGJiMTMwYWRhYWVlN2FkYTg2IiwiZXhwaXJhdGlvblRpbWUiOjE0NzUxMTg4ODU4NTd9.ImbjXRFYDNYFPtK2_Q2jffb2rc5DhTZSZopHG_DAuNU' , function  (set) {
         //下面的就是请求来的数据
         console.log(set)
     })
     //get请求,以百度为例,没有参数,没有header
     NetUitl.get( 'https://www.baidu.com/' , '' , function  (set) {
         //下面是请求下来的数据
         console.log(set)
     })
 
}

  

另:因为iOS9对https的调整,需要在项目的info.plist添加Key:NSAllowsArbitraryLoads,具体方法看http://www.cnblogs.com/shaoting/p/5148323.html

完整源码下载:https://github.com/pheromone/React-Native-1

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值