React Native 学习笔记(九)--网络请求 & 界面跳转
来源:互联网 发布:法律专业 知乎 编辑:程序博客网 时间:2024/06/05 08:22
Part One
网络请求
对于网络请求咱们直接看一下模板
对于其他的网络请求库,大家也可以学习一下,由于我现在接触的关于JavaScript的网络请求库也不多,能力有限。所以大家如果有兴趣也希望大家能给我留言,共同学习。
下面的方式也是RN中提供的网络请求API。好了废话不多少了,咱们先顺一遍网络请求:
// 创建请求头,添加请求头信息var myHeaders = new Headers();myHeaders.append("Content-Type", "text/plain");myHeaders.append("Content-Lenght", content.length.toString());myHeaders.append("X-Custom-Header", "ProcessThisImmediately");// 请求体设置var myInit = { method: 'GET', headers: myHeaders, mode: 'cors', cache: 'default' };// 创建请求var myRequest = new Request('www.csdn.com', myInit);// 发送请求 使用fetch()方法 发送请求fetch(myRequest)// 响应回调, then是一个链式处理函数.then(function(response){ return response.blob();})// 这里的函数的参数就是上面的then函数返回的值.then(function(myBlob){ // 进一步处理响应值});
上面的代码中Header提供的还有别的构造函数:
myHeaders = new Headers({ "Content-Type": "text/plain", "Content-Length": content.length.toString(), "X-Custom-Header": "ProcessThisImmediately",});
处理Header之外,还有一个需要我们注意的,也是需要我们深入学习的,那就是fetch,对于网络请求肯定是异步的。fetch方法会返回一个Promise,这种模式可以简化异步请求的代码写法。如下所示,我们可以轻松实现对响应体的处理:
// 定义一个请求数据的方法getMoviesFromApiAsync() { return fetch('www.csdn.com') .then((response) => response.json()) .then((responseJson) => { return responseJson.blob; }) .catch( (error) => { console.error(error.message); } );}
async / await 语法
// 注意这个方法前面有async关键字async getMoviesFromApi() { try{ // 注意这里的await语句,其所在的方法必须有async关键字声明 let response = await fetch('www.csdn.com'); let responseJson = await response.json(); return responseJson.movies; } catch(error) { console.error(error); }}
使用其他的网络库
React Native中已经内置了XMLHttpRequest API(也就是俗称的ajax)。一些基于XMLHttpRequest封装的第三方库也可以使用,例如 frisbee或者axios。但是注意不能使用jQuery,因为jQuery中还使用了很多浏览器中才有而RN中没有的东西。
var request = new XMLHttpRequest();request.onreadystatechange = (e) => { if(request.readyState !== 4){ return; } if(request.status === 200){ console.log('success', request.responseText); } else { console.warn('error'); }};request.open('GET', 'https://mywebsite.com/endpoint/');request.send();
WebSocket支持
React Native 还支持 WebSocket,这种协议可以在单个TCP连接上提供 全双工的通信信道。
var ws = new WebSocket('ws://host.com/path');ws.onopen = () => { // 打开一个连接 ws.send('something'); // 发送一个消息};ws.onmessage = (msg) => { // 接收到了一个消息 console.log(msg.data);};ws.onerror = (e) => { // 发生了一个错误 console.log(e.message);};ws.onclose = (e) => { // 连接被关闭了 console.log(e.code, e.reason);};
Part Two
界面跳转
首先,我们先来了解一下在React Naive中实现界面跳转需要我们掌握的内容:
1.导航器
在React Native中导航器组件首推:Navigator。此组件是完全通过JavaScript实现的,因此可以跨平台工作,也便于定制。
2.场景(Scene)
场景就是一个全屏的组件。也可以简单的理解为屏幕上放的最大的父布局、父容器。
下面的代码就是创建了一个场景:
import React, {Component} from 'react';import {View, Text} from 'react-native';// 注意:我们创建的这个类是通过 export default 关键字声明的。意思就是声明的这个类可以在其他组件中引入import React, { Component, PropTypes } from 'react';import { View, Text, TouchableHighlight } from 'react-native';export default class MyScene extends Component { static propTypes = { title: PropTypes.string.isRequired, onForward: PropTypes.func.isRequired, onBack: PropTypes.func.isRequired, } render() { return ( <View> <Text>Current Scene: { this.props.title }</Text> <TouchableHighlight onPress={this.props.onForward}> <Text>点我进入下一场景</Text> </TouchableHighlight> <TouchableHighlight onPress={this.props.onBack}> <Text>点我返回上一场景</Text> </TouchableHighlight> </View> ) }}
下面我们来使用这个场景:
import React, { Component } from 'react';import { AppRegistry } from 'react-native';// 引入我们的MyScene文件import MyScene from './MyScene';class TestApp extends Component{ render(){ return( <MyScene /> ); }}AppRegistry.registerComponent('TestApp', () => TestApp);
下面重点讲一下导航器 — Navigator
使用导航器经常会碰到“路由(route)”的概念,在React Native中专指包含了场景信息的对象。在使用导航器之前,我们先来看一下导航器的一些API :
下面我们以场景MyScene为例来学习一下这些API(也就是说api中的属性或者方法的参数有需要的我们就直接按照场景MyScene来写了)
initialRoute
initialRoute = { {场景对象的属性: 属性值 , 路由自定义的属性 : 属性值} }
initialRoute = { {title: ‘MySceneTitle’} }
此属性用于指定要渲染的场景对象,自定义的属性值一般是用来区分不同的场景的。
initialRoute必须是initialRouteStack中的一个路由。initialRoute默认为initialRouteStack中最后一项。
initialRouteStack [object]
提供一个路由集合用来初始化。如果没有设置初始路由的话则必须设置该属性。如果没有提供该属性,它将被默认设置成一个只含有initialRoute的数组。
renderScene
此属性用于指定场景如何展示。函数的两个参数:
路由 route:可以通过区分路由自定义参数,来展示不同的场景;
导航器对象navigator:用来变化场景,最常用的就是其 push() 和 pop()方法,分别用来 入栈 和 出栈;
renderScene = {funtion(场景对象(路由), 导航器对象){ return 场景;}}
renderScene = { (route, navigator) => <MyScene title={route.title} // 下一个 onForward={ function(){ navigator.push( { title: '第二个界面' } ); } } // 返回 onBack={ function(){ navigator.pop(); } } />}
上面的和官网中的也就有一点不同,我没有在路由中创建自定义的属性,目的也是为了能简化代码,便于理解和学习。
另外,有兴趣的可以看一下 Navigator API 文档 和这个教程。毕竟官网的这个文档比较简略。
configureScene
可选属性,用来配置场景的动画和手势,属性值是function。两个参数,一个是当前路由,一个是当前的路由栈。返回值是一个场景配置对象。
(route, routeStack) => Navigator.SceneConfigs.FloatFromRight
Navigator.SceneConfigs.PushFromRight (默认)
Navigator.SceneConfigs.FloatFromRight
Navigator.SceneConfigs.FloatFromLeft
Navigator.SceneConfigs.FloatFromBottom
Navigator.SceneConfigs.FloatFromBottomAndroid
Navigator.SceneConfigs.FadeAndroid
Navigator.SceneConfigs.HorizontalSwipeJump
Navigator.SceneConfigs.HorizontalSwipeJumpFromRight
Navigator.SceneConfigs.VerticalUpSwipeJump
Navigator.SceneConfigs.VerticalDownSwipeJump
Part Three
完整代码
import React, { Component } from 'react';import { AppRegistry, Navigator, Text, View } from 'react-native';import MyScene from './MyScene';class TestApp extends Component { render() { return ( <Navigator initialRoute={{ title: 'My Initial Scene' }} renderScene={(route, navigator) => <MyScene title={route.title} // Function to call when a new scene should be displayed onForward={ () => { navigator.push({ title: 'Scene ' + nextIndex }); }} // Function to call to go back to the previous scene onBack={() => { navigator.pop(); }} /> } /> ) }}AppRegistry.registerComponent('TestApp', () => TestApp);
Part Four
资料
React Native 0.39 Navigator
React Native 中文社区
另外:以上学习博客中的连接如果打不开的话,请大家注意一下连接中的RN版本。后期我会再审查一遍连接指向,谢谢!!请大家多多指教!!
- React Native 学习笔记(九)--网络请求 & 界面跳转
- React-Native 学习笔记十七(网络请求)
- React-Native网络请求加载界面
- React Native网络请求学习笔记(Android版本)
- React-Native学习笔记之:Fetch网络请求
- react native学习笔记8——网络请求
- react native 学习笔记----网络
- react native 学习笔记----网络
- React Native 学习笔记九(ScrollView的使用)
- React Native 学习笔记十一(页面跳转)
- React Native网络请求
- React Native 网络请求
- React-Native傻瓜式学习笔记(三):基于事件发布/订阅的网络请求工具类封装
- React native 界面跳转原生Android界面
- React-Native中网络请求
- React-native fetch请求网络
- React Native Fetch网络请求
- react native 界面跳转与点击事件
- 使用 PHP 7 给 Web 应用加速
- StartCom 申请 SSL 证书及 Nginx HTTPS 支持配置全攻略
- Dbutils
- 批处理制作静默安装(后台安装)程序包
- 关于const修饰
- React Native 学习笔记(九)--网络请求 & 界面跳转
- IO流
- 全局Result(让多个action公用一个result)
- Android SDK下载和更新失败的解决方法
- Linux服务器crontab的使用
- java之旅之习题大作战
- 修改Fedora 25的启动菜单
- python中format用法
- 3043: IncDec Sequence