zoukankan      html  css  js  c++  java
  • React Native中的网络请求fetch和简单封装

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

    https://segmentfault.com/a/1190000003810652

    /**
     * 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是人家已经封装好,再度封装只是基于自己项目进行的封装,这里只是基于公司项目实现一下,讲解一下回调:

    封装实现:

    /**
     * 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;
    

    调用:

    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

  • 相关阅读:
    20201220第二周学习总结
    师生关系
    快速浏览教材
    学期2020-2021-1学号20201220《信息安全专业导论》第1周学习总结
    编程将字符串s倒序输出,要求利用函数递归实现
    小学生四则运算随机生成程序
    礼炮问题
    C语言最大公约数
    C语言判断三角形类型
    C语言:一元二次方程解的所有情况
  • 原文地址:https://www.cnblogs.com/shaoting/p/5933405.html
Copyright © 2011-2022 走看看