ReactNative基础教程
React Native基础教程
  React Native是Facebook开源的框架,⽤来写Android和iOS移动App。它的⼝号是 “Learning once, write anywhere”,⽬的是统⼀View的编写。我个⼈也是由于公司需要,故⼊坑学习,下⾯就我的理解简单总结下React Native的基本知识。
  需要的预备知识:
    1、学习JavaScript(最新JS核⼼标准ES6)
    2、简单学习React.js(开发⽹页)
    3、学习JSX(HTML和JavaScript的混写)
  我主要讲⼀下⼏个⽅⾯:
    1、React Native的基本模板写法
    2、React Native的Flexbox布局
    3、React Native组件化
    4、React Native的⽣命周期
    5、React Native的数据状态引⽤
  1、React Native的基本模板写法
1 'use strict';  =====>(严格模式)
2
3 var React = require('react-native');  =====>(导⼊模块react-native,关键字是: require)
4 var {
5  AppRegistry,
6  StyleSheet,    =====>(声明要⽤到得系统组件)
7  Text,
8  View,
9 } = React;
10
11 var FirstApp = ateClass({  =====>(创建组件名称是:FirstApp,关键字是createClass)
12
13    render: function() {  =====>(渲染⽅法,组件中必须得⽅法)
14
15        return (
16
17              <View style={ainer}>                        =====>(这⼏⾏就是JSX语法写的)
18                                                 
19                  <Text style={{fontSize: 18}}>这是我的第⼀个React Native APP</Text>  =====>(显⽰在⼿机屏幕上的内容在这写)
20
21              </View>                                    =====>(这⾥⽤view包起来,⽽不是⽤div)
22          );
23    }
24 });
25
26 var styles = ate( =====>(创建样式,看上⾯加粗划线的代码,可以在这⾥定义,也可以直接写在代码⾥⾯,如上⾯的fontSize:18)
27  container: {
28      flex: 1,
29      justifyContent: 'center',
30      alignItems: 'center',
31      backgroundColor: 'orange'
32    }
33 });
34
isterComponent('FirstApp', () => FirstApp);  =====>(注册应⽤,使能够加载运⾏, FirstApp就是你的App名称)
36
ports = FirstApp; =====>(导出组件,使能够在别的组件中⽤)
  最终的打印结果:
  2、React Native的Flexbox布局(样式)
  这个⽐较简单,需⾃⼰多实践就⾏,简单说⼏个:
  flex: 这个是⼀个灵活的布局属性,类似⽐例,⽐如你想在⼀⾏中定义三张图⽚,它们的宽⽐为1:3:2,那么你可以分别设置它们的flex为: 1,3,2
  flexDirection: 这个是设置布局的⽅向(column 和 row), 视图排列⽅法是列布局还是⾏布局
  justifyContent 和 alignItems: 这2个是⽔平和垂直布局,可以设置⽔平居中,垂直居中等
  margin(包括marginLeft, marginRight, marginTop, marginBottom) :这个是设置间距(距离左,右,上,下)多少
  position (包括absolute和relative): 这个是设置视图的位置是固定的还是相对的
    ......
  3、React Native的组件化,我们可以分功能来⾃定义模块写代码,然后把所有模块组合起来,就是⼀个完整的程序了
1 'use strict';
2
3 var React = require('react-native');
4 var {
5  AppRegistry,
6  StyleSheet,
7  Text,
8  View,
9 } = React;
10
11 var FirstApp = ateClass({
12
13    render: function() {
14
15        return (
16
17              <View style={ainer}>
18
19                  <HelloWorld myText='我是第⼀' />
20                  <HelloWorld myText='我是第⼆' />  =====>(这⾥三个是引⽤了下⾯定义的组件,HelloWorld⾃动成为FirstApp的⼦组件)
21                  <HelloWorld myText='我是第三' />  =====>(myText是传给HelloWorld的属性)
22
23              </View>
24          );
25    }
26 });
27
28 var HelloWorld = ateClass({
29
30    render: function() {
31
32        return (
33
34              <View>
35                  <Text style={{fontSize: 20, color: 'red'}}>{Text}</Text>
36              </View>                    =====>(从⽗组件传过来的myText属性,⽤Text接收)
37          );
38    }
39 });
  最终的打印结果:
  4、React Native的⽣命周期
  a、getInitialState: 在组建被挂载之前调⽤,我们⼀般在⾥⾯定义初始state值
  b、getDefaultProps: 在组件类创建的时候调⽤⼀次,然后返回值被缓存下来。如果⽗组件没有指定 getDefaultProps 中定义的属性,则此处返回的对象中的相应属性将会合并到this.props
  c、componentWillMount: 服务器端和客户端都只调⽤⼀次,在初始化渲染执⾏之前⽴刻调⽤
  d、render: 执⾏视图的渲染操作
  e、componentDidMount: 在初始化渲染执⾏之后⽴刻调⽤⼀次,仅客户端有效(服务器端不会调⽤)
  f、componentWillUnmount: 组件从DOM中移除时调⽤,⼀般在次⽅法进⾏必要的清理⼯作
1 'use strict';
2
3 var React = require('react-native');
4 var {
5  AppRegistry,
6  StyleSheet,
7  Text,
8  View,
9 } = React;
10
11 var FirstApp = ateClass({
12
13    getDefaultProps: function() {
14
15        console.log('getDefaultProps');
16
17    },
18
19    getInitialState: function() {
20
21        console.log('getInitialState');
22
23        return {
24
25        };
26    },
27
28    componentWillMount: function() {
29
30        console.log('componentWillMount');
31    },
32
33    componentDidMount: function() {
react耐克图片34
35        console.log('componentDidMount');
36    },
37
38    componentWillUnmount: function() {
39
40        console.log('componentWillUnmount');
41    },
42
43    render: function() {
44
45        console.log('render');
46
47        return (
48
49              <View style={ainer}>
50
51                  <HelloWorld myText='我是第⼀' />
52                  <HelloWorld myText='我是第⼆' />
53                  <HelloWorld myText='我是第三' />
54
55              </View>
56          );
57    }
58 });
59
60 var HelloWorld = ateClass({
61
62    render: function() {
63
64        return (
65
66              <View>
67                  <Text style={{fontSize: 20, color: 'red'}}>{Text}</Text>
68              </View>
69          );
70    }
71 });
72
73 var styles = ate({
74  container: {
75      flex: 1,
76      justifyContent: 'center',
77      alignItems: 'center',
78      backgroundColor: 'orange'
79    }
80 });
81
isterComponent('FirstApp', () => FirstApp);
83
ports = FirstApp;
   最终的打印结果(执⾏顺序):
  5、React Native的数据状态引⽤
  a、props: 属性,⽤于不同组件之间数值传递,⼀般是从⽗组件中传值给⼦组件,⼦组件最好不要修改此值,⽽由⽗组件来修改,进⽽更新⼦组件的值
  还是上⾯的栗⼦:
1 'use strict';
2
3 var React = require('react-native');
4 var {
5  AppRegistry,
6  StyleSheet,
7  Text,
8  View,
9 } = React;
10
11 var FirstApp = ateClass({
12
13    render: function() {
14
15        console.log('render');
16
17        return (
18
19              <View style={ainer}>
20
21                  <HelloWorld myText='我是第⼀' />
22                  <HelloWorld myText='我是第⼆' />  =====>(HelloWorld嵌套在FirstApp中,所以HelloWorld⾃动成为了FirstApp的⼦组                                    件,myText就是要传递给⼦组件
23                  <HelloWorld myText='我是第三' />
24
25              </View>
26          );
27    }
28 });
29
30 var HelloWorld = ateClass({
31
32    render: function() {
33
34        return (
35
36              <View>
37                  <Text style={{fontSize: 20, color: 'red'}}>{Text}</Text> =====>(HelloWorld通过props来接收传                                                       
38              </View>
39          );
40    }
41 });
42
43 var styles = ate({
44  container: {
45      flex: 1,
46      justifyContent: 'center',
47      alignItems: 'center',
48      backgroundColor: 'orange'
49    }
50 });
51
isterComponent('FirstApp', () => FirstApp);
ports = FirstApp;
  最终的打印结果:
  b、state: 状态,⽤于同⼀组件中数据的更新
1 'use strict';
2
3 var React = require('react-native');
4 var {
5  AppRegistry,
6  StyleSheet,
7  Text,
8  View,
9  TouchableHighlight
10 } = React;
11
12 var FirstApp = ateClass({
13
14    getInitialState: function() {
15
16        return {
17            myValue: '我是初始值'    =====>(设置初始值)
18        };
19
20    },
21
22    render: function() {
23
24        console.log('render');
25
26        return (
27
28            <View style={{flex: 1, justifyContent: 'center', alignItems: 'center'}}>
29                <Text onPress={this.changeText}  =====>(设置⽂字点击事件,当点击的时候会调⽤changeText⽅法)
30                      style={{fontSize: 30,
31                              color: 'orange',      =====>(设置⽂字样式)
32                              textAlign: 'center'}}>
33
34                                {Value}  =====>(第⼀次加载数据的时候会获取初始值,⽤state来获取到初始值)
35                </Text>
36            </View>
37          );
38    },
39
40    changeText: function() {
41
42      this.setState({    =====>(这是⽂字的点击事件,当我想要更改state初始值的时候,需要⽤到setState来更改)
43
44          myValue: '我是修改后的值'  =====>(修改初始值myValue,当我修改这⾥后,系统会⾃动去调⽤render函数⽅法,Value会⾃动更新成最新的值,即:我是修改后的值)
45      })
46    }
47 });
48
49
isterComponent('FirstApp', () => FirstApp);
51
ports = FirstApp;
  最终的打印结果:
  c、ref: ⽤来指⽰render中某组件,调⽤的话就是x
1 'use strict';
2
3 var React = require('react-native');
5  AppRegistry,
6  StyleSheet,
7  Text,
8  View,
9  Image,
10  TouchableHighlight
11 } = React;
12
13 var FirstApp = ateClass({
14
15    render: function() {
16
17        console.log('render');
18
19        return (
20
21            <View style={{flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: 'yellow'}}>
22
23                <Image
24                    ref='myImg'
25                    source={{uri: 'pic14.nipic/20110522/7411759_164157418126_2.jpg' }}
26                    style={{width: 350, height: 350}} />    =====>(设置⼀张图⽚,并且设置宽⾼为350)
27
28                <Text onPress={this.changePic} style={{marginTop: 50}}>改变图⽚的⼤⼩</Text> ===>(点击⽂字,触发事件changePic)
29            </View>
30          );
31    },
32
33    changePic: function() {  =====>(点击⽂字会调⽤这个⽅法)
34
35        console.log('我打印出上⾯的image的属性来看看:',Img.props); =====>(打印出上⾯的Image来看看)
36    }
37 });
38
isterComponent('FirstApp', () => FirstApp);
40
ports = FirstApp;
  最终的执⾏结果:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。