react与react native 的es5 es6写法对照表

上传人:第*** 文档编号:31321709 上传时间:2018-02-06 格式:DOCX 页数:11 大小:32.01KB
返回 下载 相关 举报
react与react native 的es5 es6写法对照表_第1页
第1页 / 共11页
react与react native 的es5 es6写法对照表_第2页
第2页 / 共11页
react与react native 的es5 es6写法对照表_第3页
第3页 / 共11页
react与react native 的es5 es6写法对照表_第4页
第4页 / 共11页
react与react native 的es5 es6写法对照表_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《react与react native 的es5 es6写法对照表》由会员分享,可在线阅读,更多相关《react与react native 的es5 es6写法对照表(11页珍藏版)》请在金锄头文库上搜索。

1、ReactReact Native 的 ES5 ES6写法对照表模块引用在 ES5里,如果使用 CommonJS标准,引入 React包基本通过 require进行,代码类似这样:/ES5var React = require(react);var Component,PropTypes = React; /引用 React抽象组件var ReactNative = require(react-native);var Image,Text, = ReactNative; /引用具体的 React Native组件在 ES6里,import 写法更为标准/ES6import React, Com

2、ponent,PropTypes, from react;import Image,Text from react-native注意在 React Native里,import 直到 0.12+才能正常运作。导出单个类在 ES5里,要导出一个类给别的模块用,一般通过 module.exports来导出/ES5var MyComponent = React.createClass( .);module.exports = MyComponent;在 ES6里,通常用 export default来实现相同的功能:/ES6export default class MyComponent exten

3、ds Component.引用的时候也类似:/ES5var MyComponent = require(./MyComponent);/ES6import MyComponent from ./MyComponent;定义组件在 ES5里,通常通过 React.createClass来定义一个组件类,像这样:/ES5var Photo = React.createClass(render: function() return ();,);在 ES6里,我们通过定义一个继承自 React.Component的 class来定义一个组件类,像这样:/ES6class Photo extends R

4、eact.Component render() return ();给组件定义方法从上面的例子里可以看到,给组件定义方法不再用 名字: function()的写法,而是直接用名字(),在方法的最后也不能有逗号了。/ES5 var Photo = React.createClass(componentWillMount: function(),render: function() return ();,);/ES6class Photo extends React.Component componentWillMount() render() return ();定义组件的属性类型和默认属性在

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,

6、videoSrc: React.PropTypes.string.isRequired,render: function() return ();,);在 ES6里,可以统一使用 static成员来实现/ES6class Video extends React.Component static defaultProps = autoPlay: false,maxLoops: 10,; / 注意这里有分号static propTypes = autoPlay: React.PropTypes.bool.isRequired,maxLoops: React.PropTypes.number.isR

7、equired,posterFrameSrc: React.PropTypes.string.isRequired,videoSrc: React.PropTypes.string.isRequired, ; / 注意这里有分号render() return (); / 注意这里既没有分号也没有逗号也有人这么写,虽然不推荐,但读到代码的时候你应当能明白它的意思:/ES6class Video extends React.Component render() return ();Video.defaultProps = autoPlay: false,maxLoops: 10,;Video.pr

8、opTypes = autoPlay: React.PropTypes.bool.isRequired,maxLoops: React.PropTypes.number.isRequired,posterFrameSrc: React.PropTypes.string.isRequired,videoSrc: React.PropTypes.string.isRequired,;注意: 对 React开发者而言,static 成员在 IE10及之前版本不能被继承,而在 IE11和其它浏览器上可以,这有时候会带来一些问题。React Native 开发者可以不用担心这个问题。初始化 STATEE

9、S5下情况类似,/ES5 var Video = React.createClass(getInitialState: function() return loopsRemaining: this.props.maxLoops,;,)ES6下,有两种写法:/ES6class Video extends React.Component state = loopsRemaining: this.props.maxLoops,不过我们推荐更易理解的在构造函数中初始化(这样你还可以根据需要做一些计算):/ES6class Video extends React.Component constructo

10、r(props)super(props);this.state = loopsRemaining: this.props.maxLoops,;把方法作为回调提供很多习惯于 ES6的用户反而不理解在 ES5下可以这么做:/ES5var PostInfo = React.createClass( handleOptionsButtonClick: function(e) / Here, this refers to the component instance.this.setState(showOptionsModal: true);,render: function()return (this

11、.props.label),);在 ES5下,React.createClass 会把所有的方法都 bind一遍,这样可以提交到任意的地方作为回调函数,而 this不会变化。但官方现在逐步认为这反而是不标准、不易理解的。在 ES6下,你需要通过 bind来绑定 this引用,或者使用箭头函数(它会绑定当前 scope的 this引用)来调用/ES6class PostInfo extends React.ComponenthandleOptionsButtonClick(e)this.setState(showOptionsModal: true);render()return (this.h

12、andleOptionsButtonClick(e)this.props.label ),箭头函数实际上是在这里定义了一个临时的函数,箭头函数的箭头=之前是一个空括号、单个的参数名、或用括号括起的多个参数名,而箭头之后可以是一个表达式(作为函数的返回值),或者是用花括号括起的函数体(需要自行通过 return来返回值,否则返回的是undefined)。/ 箭头函数的例子()=1v=v+1(a,b)=a+b()=alert(foo);e=if (e = 0)return 0;return 1000/e;需要注意的是,不论是 bind还是箭头函数,每次被执行都返回的是一个新的函数引用,因此如果你还

13、需要函数的引用去做一些别的事情(譬如卸载监听器),那么你必须自己保存这个引用/ 错误的做法 class PauseMenu extends React.ComponentcomponentWillMount()AppStateIOS.addEventListener(change, this.onAppPaused.bind(this);componentDidUnmount()AppStateIOS.removeEventListener(change, this.onAppPaused.bind(this); onAppPaused(event)/ 正确的做法 class PauseMen

14、u extends React.Componentconstructor(props)super(props);this._onAppPaused = this.onAppPaused.bind(this);componentWillMount()AppStateIOS.addEventListener(change, this._onAppPaused);componentDidUnmount()AppStateIOS.removeEventListener(change, this._onAppPaused);onAppPaused(event)从这个帖子中我们还学习到一种新的做法:/ 正

15、确的做法 class PauseMenu extends React.ComponentcomponentWillMount()AppStateIOS.addEventListener(change, this.onAppPaused);componentDidUnmount()AppStateIOS.removeEventListener(change, this.onAppPaused);onAppPaused = (event) = /把方法直接作为一个 arrow function的属性来定义,初始化的时候就绑定好了 this指针Mixins在 ES5下,我们经常使用 mixin来为我们的类添加一些新的方法,譬如 PureRenderMixinvar PureRenderMixin = require(react-addons-pure-render-mixin);React.createClass(mixins: PureRenderMixin,render: function() return foo;);然而现在官方已经不再打算在 ES6里继续推行 Mixin,他们说: M

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号