RN 的 fetch 组件网络请求
来源:互联网 发布:sql创建会员信息表 编辑:程序博客网 时间:2024/06/16 22:07
一 .网络基础
创建一个.js 文件
import React, {Component} from 'react';import { AppRegistry, StyleSheet, Text, View, TouchableOpacity} from 'react-native';/** 在 ReactNative 中,使用 fetch 实现网络请求. fetch 同 XMLHttpRequest 非常类似,是一个封装程度更高的网络 API, 使用起来很简洁,因为使用了 Promise.** Promise 是异步编程的一种解决方案,比传统的解决方案 -- 回调函数事件 -- 更合理和更强大, ES6将其写进了语言标准,统一了用法,原生提供了 Promise 对象,简单说就是一个容器,里面保存着整个未来才会起结束的事件(通常是一个异步操作)的结果** Promise 对象代表一个异步操作,有三种状态: Pending(进行中), Resolved(已完成), Rejected(已失败).** Promise 实例生成之后,可以分别指定"完成"和"失败"状态的回调函数.实现方式:链式调用方法.* fetch 中使用的就是该特性.** 语法:* fetch(参数)* .then(完成的回调函数)* .catch(失败的回调函数)** fetch(url, opts)* .then((response) => {* //网络请求成功执行改回调函数,得到响应对象,铜通过 response 可以获取请求的数据* //例如: json,text 等等** return response.text();* //return response.json();* })** .then((resonseData) => {* //处理请求得到的数据** })* .catch((error) => {* //网络请求失败执行该回调函数,得到错误信息** })*** */function getRequest(url) { var opts = { method:"GET" } fetch(url, opts) .then((response) =>{ return response.text(); //返回一个带有文本对象 }) .then((responseText) => { alter(responseText); }) .catch((error) => { alter(error); })}var GetData = React.createClass({ render:function () { return( <View style={styles.container}> <TouchableOpacity onPress={getRequest.bind(this,"http://project.lanou3g.com/projects/bj/reactnative/login.php?username=niu&password=1234")}> <View style={styles.btn}> <Text>GET</Text> </View> </TouchableOpacity> <TouchableOpacity onPress={PostRequest.bind(this,"http://project.lanou3g.com/projects/bj/reactnative/login.php")}> <View style={styles.btn}> <Text>POST</Text> </View> </TouchableOpacity> </View> ); }});/** FormData** Web 应用中频繁使用的一项功能就是表单数据的序列化, XMLHttpRequest2级定义了 FormData 类型.* FormData 主要用于实现序列化表单以及创建与表单格式相同的数据** var data = new FormData();* data.append("name", "yihuiyun");* append 方法接收两个参数:;链和值.分别对应表单字段和字段中包含的值,添加多个键值对.** 在 jquery 中,"key1=value1&key2=value2"作为参数传入对象框架会自动封装成 FormData 形式* 在 Fetch 中进行 post 请求时,需要自动创建FormData 对象传给 body* */function PostRequest(url) { //将"key1=value1&key2=value2"封装成 FormData 形式 let formData = new FormData(); formData.append("username","niu"); formData.append("password","1234"); var opts = { method:"POST", body:formData } fetch(url, opts) .then((response) =>{ return response.text(); //返回一个带有文本对象 }) .then((responseText) => { alter(responseText); }) .catch((error) => { alter(error); })}var styles = StyleSheet.create({ container:{ flex:1, marginTop:30, backgroundColor:"cyan", flexDirection:"row", justifyContent:"center", alignItems:"center" }, btn:{ width:60, height:30, borderWidth:1, borderRadius:3, backgroundColor:"yellow", borderColor:"black", justifyContent:"center", alignItems:"center" }});module.exports = GetData;
二 . 结合ListView 使用
在 .js文件中
import React, {Component} from 'react';import { AppRegistry, StyleSheet, View, Text, TouchableOpacity, ToastAndroid, Image, ListView,} from 'react-native';Dimensions = require('Dimensions');width = Dimensions.get('window').width;height = Dimensions.get('window').height;class FetchG extends Component { /** * 初始化数据 */ constructor(props) { super(props); this.state = { dataSource: new ListView.DataSource({ rowHasChanged: ((row1, row2) => row1 !== row2) }), load: false } } /** * 渲染界面 */ render() { /** * 因为数据时异步加载, 用load判断是否正在加载 如果加载完毕重新刷新界面改变load值 */ if (!this.state.load) { return <Text>加载中...</Text> } return (this.renderView(this.state.dataSource)) } renderView() { return ( <ListView dataSource={this.state.dataSource} renderRow={this.renderRow} /> ) } /** * 重写renderRow */ renderRow(rowData) { return ( <View style={{ flex: 1 }}> <Image source={{ uri: rowData.url }} style={{ width: width, height: height / 2, marginTop: 5 }} /> </View> ) } /** * 加载耗时操作 */ componentDidMount() { this.getDataFromFetch(); } getDataFromFetch() { fetch('http://gank.io/api/search/query/listview/category/福利/count/10/page/1')//请求地址 .then((response) => response.json())//取数据 .then((responseText) => {//处理数据 //通过setState()方法重新渲染界面 this.setState({ //改变加载ListView load: true, //设置数据源刷新界面 dataSource: this.state.dataSource.cloneWithRows(responseText.results), }) }) .catch((error) => { console.warn(error); }).done(); }}module.exports = FetchG;
阅读全文
0 0
- RN 的 fetch 组件网络请求
- 网络请求fetch和组件ListView
- ReactNative fetch 网络请求
- Fetch基本网络请求
- React-native fetch请求网络
- 高效网络请求之Fetch
- React Native Fetch网络请求
- React-Native Fetch网络请求的简单封装
- 添加布尔量的React Native fetch网络请求库。
- react-native网络请求Fetch中遇到的坑
- React / RN组件的生命周期
- RN实战项目网络请求封装(二)
- RN实战项目网络请求封装
- react-native(Fetch网络请求数据)
- React-Native Fetch方法发送网络请求
- React Native 之 网络请求 fetch
- React Native网络请求fetch简单封装
- React Native 之 网络请求 fetch
- 03UI
- centos 6.9 升级python 2.6.6 至 3.5.0
- BBS论坛项目 I
- 高级语言的编译:链接及装载过程介绍
- Redis的RDB和AOF持久化
- RN 的 fetch 组件网络请求
- JVM调优系列:(一)什么是JVM
- UESTC 1691 这是一道比CCCC简单题经典的中档题
- 04Broadcast Receiver
- JVM调优系列:(二)JVM运行时数据区域
- TypeScript 接口介绍
- Eclipse自动生成方法注释 快捷键
- Looksery Cup 2015 C. The Game Of Parity —— 博弈
- 593. Valid Square