react-native ES5與ES6寫法對照表

轉載連接:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/react-native-es5-and-es6-writing-table/react

 對於不少初次學習React-Native人來講,都會爲ES6語法所困惑,由於網上好多React-Native的Demo都是用ES5語法寫的。因此我剛開始也是學的ES5,對我來講ES5語法比較熟悉,可是看到ES6的語法剛開始就感受怪怪的,相信對初次接觸ES6寫法的es6

人來講都會有這樣的感受。今天我就整理下ES5跟ES6寫法的規範,但願會對你有所幫助。react-native

1、模塊引用ide

在ES5裏引入React的包基本經過require進行,代碼以下:函數

    //ES5oop

var React=require('react-native');
var {
 Image,
 Text,
 propTypes
 }=React;

2、導出單個類post

//在ES6中用,import導入學習

import React,{Image,Text,PropTypes} from 'react-native'

在ES5中,通常經過module.exports來導出ui

//ES5this

var MyComponent=React.createClass({
 .....
}),
module.exports=MyComponent;

 

//ES6

export default class MyComponent extends React.component{
 ....
}

引用的時候:

//ES5

var MyComponent=require('./MyComponent.js');
 

//ES6

import MyComponent from './MyComponent.js'

3、定義組件

在ES5中,經過React.createClass來定義一個組件類。以下所示:

//ES5

var MyComponent=React.createClass({
 render:function(){
 return (
 <Text>...</Text> 
 );
 }
})

在ES6裏,經過定義一個繼承自React.Component的class來定義一個組件:

//ES6

class MyComponent extends React.component{
 render(){
 return(
 <Text>...</Text>
 )
 }
}

4、給組件定義方法

從上面能夠看出給組件定義方法再也不用 函數名:function()的寫法,而是直接名字,方法的後面也不用用逗號(,)

5、定義組件的屬性類型和默認屬性

在ES5裏,屬性類型和默認屬性分別經過propTypes成員和getDefaultProps方法來實現

 //ES5 
var Video = React.createClass({
    getDefaultProps: function( ) {
        return {
            autoPlay: false,
            maxLoops: 10,
        };
    },
    propTypes: {
        autoPlay: React.PropTypes.bool.isRequired,
        maxLoops: React.PropTypes.number.isRequired,
        posterFrameSrc: React.PropTypes.string.isRequired,
        videoSrc: React.PropTypes.string.isRequired,
    },
    render: function( ) {
        return (
            <View /> );
    },
});
 
在ES6裏,能夠統一使用static成員來實現
//ES6
class Video extends React.Component {
    static defaultProps = {
        autoPlay: false,
        maxLoops: 10,
    };  // 注意這裏有分號
    static propTypes = {
        autoPlay: React.PropTypes.bool.isRequired,
        maxLoops: React.PropTypes.number.isRequired,
        posterFrameSrc: React.PropTypes.string.isRequired,
        videoSrc: React.PropTypes.string.isRequired,
    };  // 注意這裏有分號
    render() {
        return (
            <View /> );
    } // 注意這裏既沒有分號也沒有逗號
}

 

6、初始化state

ES5以下:

//ES5 
var Video = React.createClass({
    getInitialState: function() {
        return {
            loopsRemaining: this.props.maxLoops,
        };
    },
})

 

ES6以下:

//ES6
class Video extends React.Component {
    state = {
        loopsRemaining: this.props.maxLoops,
    }
}

不過咱們推薦更易理解的在構造函數中初始化(這樣你還能夠根據須要作一些計算):
//ES6
class Video extends React.Component {
    constructor(props){
        super(props);
        this.state = {
            loopsRemaining: this.props.maxLoops,
        };
    }
}

 

7、把方法做爲回調提供

//ES5

var MyComponent=React.createClass({
	_example:function(){
		console.log('example')
	},
	render:function(){
	return(
		<View>
			<TouchableHighlight onPress={this._example}>	
			<Text>...</Text>
			</TouchableHighlight>		
		</View>
		)
	}
})

 

//在ES6下能夠經過bind來綁定引用,或者使用箭頭函數(它會綁定當前的scope的this引用)來調用

class MyComponent extends React.component{
	_example(){
	console.log('example')
	}
	render(){
	return(
		<View>
			<TouchableHighlight onPress={this._example.bind(this) or  ()=>{this._example()}}>	

			<Text>...</Text>

			</TouchableHighlight>
		</View>
		)
	}
}

 對於不少初次學習React-Native人來講,都會爲ES6語法所困惑,由於網上好多React-Native的Demo都是用ES5語法寫的。因此我剛開始也是學的ES5,對我來講ES5語法比較熟悉,可是看到ES6的語法剛開始就感受怪怪的,相信對初次接觸ES6寫法的

人來講都會有這樣的感受。今天我就整理下ES5跟ES6寫法的規範,但願會對你有所幫助。

1、模塊引用

在ES5裏引入React的包基本經過require進行,代碼以下:

    //ES5

var React=require('react-native');
var {
 Image,
 Text,
 propTypes
 }=React;

2、導出單個類

//在ES6中用,import導入

import React,{Image,Text,PropTypes} from 'react-native'

在ES5中,通常經過module.exports來導出

//ES5

var MyComponent=React.createClass({
 .....
}),
module.exports=MyComponent;

 

//ES6

export default class MyComponent extends React.component{
 ....
}

引用的時候:

//ES5

var MyComponent=require('./MyComponent.js');
 

//ES6

import MyComponent from './MyComponent.js'

3、定義組件

在ES5中,經過React.createClass來定義一個組件類。以下所示:

//ES5

var MyComponent=React.createClass({
 render:function(){
 return (
 <Text>...</Text> 
 );
 }
})

在ES6裏,經過定義一個繼承自React.Component的class來定義一個組件:

//ES6

class MyComponent extends React.component{
 render(){
 return(
 <Text>...</Text>
 )
 }
}

4、給組件定義方法

從上面能夠看出給組件定義方法再也不用 函數名:function()的寫法,而是直接名字,方法的後面也不用用逗號(,)

5、定義組件的屬性類型和默認屬性

在ES5裏,屬性類型和默認屬性分別經過propTypes成員和getDefaultProps方法來實現

 //ES5 
var Video = React.createClass({
    getDefaultProps: function( ) {
        return {
            autoPlay: false,
            maxLoops: 10,
        };
    },
    propTypes: {
        autoPlay: React.PropTypes.bool.isRequired,
        maxLoops: React.PropTypes.number.isRequired,
        posterFrameSrc: React.PropTypes.string.isRequired,
        videoSrc: React.PropTypes.string.isRequired,
    },
    render: function( ) {
        return (
            <View /> );
    },
});
 
在ES6裏,能夠統一使用static成員來實現
//ES6
class Video extends React.Component {
    static defaultProps = {
        autoPlay: false,
        maxLoops: 10,
    };  // 注意這裏有分號
    static propTypes = {
        autoPlay: React.PropTypes.bool.isRequired,
        maxLoops: React.PropTypes.number.isRequired,
        posterFrameSrc: React.PropTypes.string.isRequired,
        videoSrc: React.PropTypes.string.isRequired,
    };  // 注意這裏有分號
    render() {
        return (
            <View /> );
    } // 注意這裏既沒有分號也沒有逗號
}

 

6、初始化state

ES5以下:

//ES5 
var Video = React.createClass({
    getInitialState: function() {
        return {
            loopsRemaining: this.props.maxLoops,
        };
    },
})

 

ES6以下:

//ES6
class Video extends React.Component {
    state = {
        loopsRemaining: this.props.maxLoops,
    }
}

不過咱們推薦更易理解的在構造函數中初始化(這樣你還能夠根據須要作一些計算):
//ES6
class Video extends React.Component {
    constructor(props){
        super(props);
        this.state = {
            loopsRemaining: this.props.maxLoops,
        };
    }
}

 

7、把方法做爲回調提供

//ES5

var MyComponent=React.createClass({
	_example:function(){
		console.log('example')
	},
	render:function(){
	return(
		<View>
			<TouchableHighlight onPress={this._example}>	
			<Text>...</Text>
			</TouchableHighlight>		
		</View>
		)
	}
})

 

//在ES6下能夠經過bind來綁定引用,或者使用箭頭函數(它會綁定當前的scope的this引用)來調用

class MyComponent extends React.component{
	_example(){
	console.log('example')
	}
	render(){
	return(
		<View>
			<TouchableHighlight onPress={this._example.bind(this) or  ()=>{this._example()}}>	

			<Text>...</Text>

			</TouchableHighlight>
		</View>
		)
	}
}
相關文章
相關標籤/搜索