React Native学习小结

以下均为近期学习React Native的个人心得,并不完善,欢迎园友拍砖。

React Native是什么?

React Native是一个框架,一个中间层,通过这套框架我们可以完成IOS和Android的开发。

为什么选择React Native?

选择React Native是因为它确实能够解决我们的问题。
比较重要的两个特性:
1.跨平台效率高。通过js可以同时编写IOS和Android。
2.动态加载。服务端更新客户端代码与资源,很实用的技术。

用React Native就能完成开发任务吗?

虽然有一些React Native的项目已经上线了,但是只通过React Native来开发项目局限性还是很大。
React Native目前暴露的组件与API只能满足简单的开发任务。
若只需要注册页+登录也+列表页+详情页,那么React Native很好用,网络请求、UI视图交互、页面跳转均提供了很好的支持。
但是需要使用PackageManager,ActivityManager等组件的话,就需要通过React Native和Native混合开发了。

学会了React Native就可以开发IOS程序了吧?

如果是非常简单的需求,React Native应该可以满足。但复杂一些的需求还是需要借助Native丰富的接口来实现(React Native作为一个框架,提供Native所有的接口不太现实)。
 

了解了React Native的基本情况,接下来开始简单介绍基本开发知识。静态页面、交互页面、页面跳转、网络请求,基本可以理解React Native的使用了。Native模块调用也是关键部分,但官方文档描述的很清楚,依据文档进行Native编写与配置便可实现,就不介绍了。

静态页面

我们可以通过分析官方自带的demo来了解静态页面的基本内容。
 1 'use strict’;
 2 import React, {
 3   AppRegistry,
 4   Component,
 5   StyleSheet,
 6   Text,
 7   View
 8 } from 'react-native';
 9 class rnDemo extends Component {
10   render() {
11     return (
12       <View style={styles.container}>
13         <Text style={styles.welcome}>
14           Welcome to React Native!
15         </Text>
16         <Text style={styles.instructions}>
17           To get started, edit index.android.js
18         </Text>
19         <Text style={styles.instructions}>
20           Shake or press menu button for dev menu
21         </Text>
22       </View>
23     );
24   }
25 }
26 const styles = StyleSheet.create({
27   container: {
28     flex: 1,
29     justifyContent: 'center',
30     alignItems: 'center',
31     backgroundColor: '#F5FCFF',
32   },
33   welcome: {
34     fontSize: 20,
35     textAlign: 'center',
36     margin: 10,
37   },
38   instructions: {
39     textAlign: 'center',
40     color: '#333333',
41     marginBottom: 5,
42   },
43 });
44 AppRegistry.registerComponent('rnDemo', () => rnDemo);
代码很多是ES6语法,与早期React Native不太一样。不过对于Android开发来说应该更习惯这种类似编译语言的风格。
1行。表示是js的严格模式。
2行到8行。导入依赖,可以理解为java中import XX.react-native.React;和import XX.react-native.React.AppRegistry;这种。
9行。自定义组件,组件是React Native的基本元素,可以类比Activity。
10行到24行。render()方法,我的理解是渲染页面用的,里边的xml和layout类似,都是用来布局的。
26行到43行。通过StyleSheet.create()方法,生成布局所需的属性集合。在render()中的<View/>等添加style属性就可以了。类比android中每个View的属性,都是通过style来实现,我们创建的属性集合便是style集合。
44行。注册自定义组件。

交互页面

即在静态页面上添加事件处理,我们以点击事件为例。
1 <TouchableOpacity onPress={() => this.doNavigator()}>
2   <Text style={styles.welcome}>
3     Welcome to React Native new Page!
4   </Text>
5 </TouchableOpacity>

在android中我们通过setOnClickListener来实现点击事件的注册,而在React Native中,在相应的View外层套一个Touchable**的组件就可以实现这种效果了。点击事件的处理,是通过onPress属性来注册的,例子中点击后便会回调doNavigator()方法。 

页面跳转

React Native的Android页面跳转与IOS页面跳转方式略有不同。最初按照IOS方式写页面跳转,报错,在Github上参考了几个Android项目,发现Android的跳转方式复杂一些。
不过页面跳转控制是在render()中,我有些迷惑,这个render()不仅具有页面渲染的功能,竟然也有页面跳转的处理,功能似乎并不是那么清晰。
抱着先会用后理解的态度,我们只能先学习如何进行跳转了。
首先要进行页面跳转控制器的配置,我是在第一个页面配置的,代码如下
 1 render() {
 2   return (
 3     <Navigator
 4       initialRoute={{id: 'Page'}}
 5       renderScene={this.actionTo}/>
 6   );
 7 },
 8 actionTo(route, navigator){
 9   switch (route.id) {
10     case 'Page':
11       return (<Page navigator={navigator}/>);
12     case 'Page2':
13       return (<Page2 navigator={navigator}/>);
14   }
15 }
Navigator就是页面跳转控制器,initialRoute指的是初始页面,renderScene是页面跳转时回调的方法,这里就是actionTo方法。
actionTo方法,便是通过route的属性,来跳转不同的页面,可以这样理解。
 
接下来需要页面跳转时,调用如下方法即可
1 this.props.navigator.push({
2   id: 'Page2',
3 });
这里只简单介绍了push操作,pop等操作查询相关api即可。

网络请求

网络请求部分可以使用XMLHttpRequest,也可以使用更加函数式的fetch,以fetch为例进行post请求
 1 fetch(url,{ 
 2       method: "POST",
 3       headers: {
 4         "Content-Type": "application/x-www-form-urlencoded"
 5       },
 6       body: “uid=puff2"})
 7     .then((response)=>response.text())
 8     .then((textData)=>{
 9       var json=eval('(' + textData + ')');
10       Toast.show("textData:"+textData,Toast.SHORT);
11       this.setState({code:textData});
12     })
13     .done();
post请求,添加formData时遇到了一些坑,最后只能通过例子中这种原始方式进行请求了。
至于response使用text()而不是json()来读取数据,是因为直接解析son()会有问题,所以采用text()+eval进行了json解析。
不知道是不是后台搭得不规范,但是Android中Retrofit+Gson却是可以的啊......
 
 
上述的内容,基本能够理解React Native的基本使用了,作为一个Android码农,用起来真的很怪,门槛还是有的。不过抱着学习的态度,尝试一种新的技术,对我们码农自身还是很有好处的。
原文地址:https://www.cnblogs.com/puff/p/5196255.html