使用ES6语法重构React组件
在Airbnb React/JSX Style Guide中,推荐使用ES6语法来编写react组件。下面总结一下使用ES6 class语法创建组件和以前使用React.createClass方法来创建组件的不同。
创建组件
ES6 class创建的组件语法更加简明,也更符合javascript。内部的方法不需要使用function关键字。
React.createClass
import React from 'react'; const MyComponent = React.createClass({ render: function() { return ( <div>以前的方式创建的组件</div> ); } }); export default MyComponent;
React.Component(ES6)
import React,{ Component } from 'react'; class MyComponent extends Component { render() { return ( <div>ES6方式创建的组件</div> ); } } export default MyComponent;
props propTypes and getDefaultProps
1.使用React.Component创建组件,需要通过在constructor中调用super()将props传递给React.Component。另外react 0.13之后props必须是不可变的。
2.由于是用ES6 class语法创建组件,其内部只允许定义方法,而不能定义属性,class的属性只能定义在class之外。所以propTypes要写在组件外部。
3.对于之前的getDefaultProps方法,由于props不可变,所以现在被定义为一个属性,和propTypes一样,要定义在class外部。
React.createClass
import React from 'react'; const MyComponent = React.createClass({ propTypes: { nameProp: React.PropTypes.string }, getDefaultProps() { return { nameProp: '' }; }, render: function() { return ( <div>以前的方式创建的组件</div> ); } }); export default MyComponent;
React.Component(ES6)
import React,{ Component } from 'react'; class MyComponent extends Component { constructor(props) { super(props); } render() { return ( <div>ES6方式创建的组件</div> ); } } MyComponent.propTypes = { nameProp: React.PropTypes.string }; MyComponent.defaultProps = { nameProp: '' }; export default MyComponent;
State
使用ES6 class语法创建组件,初始化state的工作要在constructor中完成。不需要再调用getInitialState方法。这种语法更加的符合JavaScript语言习惯。
React.createClass
import React from 'react'; const MyComponent = React.createClass({ getInitialState: function() { return { data: [] }; }, render: function() { return ( <div>以前的方式创建的组件</div> ); } }); export default MyComponent;
React.Component(ES6)
import React,{ Component } from 'react'; class MyComponent extends Component { constructor(props) { super(props); this.state = { data: [] }; } render() { return ( <div>ES6方式创建的组件</div> ); } } export default MyComponent;
this
使用ES6 class语法创建组件, class中的方法不会自动将this绑定到实例中。必须使用 .bind(this)或者 箭头函数 =>来进行手动绑定。
React.createClass
import React from 'react'; const MyComponent = React.createClass({ handleClick: function() { console.log(this); }, render: function() { return ( <div onClick={this.handleClick}>以前的方式创建的组件</div> ); } }); export default MyComponent;
React.Component(ES6)
import React,{ Component } from 'react'; class MyComponent extends Component { handleClick() { console.log(this); } render() { return ( <div onClick={this.handleClick.bind(this)}>ES6方式创建的组件</div> ); } } export default MyComponent;
也可以将绑定方法写到constructor中:
import React,{ Component } from 'react'; class MyComponent extends Component { constructor(props) { super(props); this.handleClick = this.handleClick.bind(this); } handleClick() { console.log(this); } render() { return ( <div onClick={this.handleClick}>ES6方式创建的组件</div> ); } } export default MyComponent;
或者使用箭头函数 => :
import React,{ Component } from 'react'; class MyComponent extends Component { handleClick = () => { console.log(this); } render() { return ( <div onClick={this.handleClick}>ES6方式创建的组件</div> ); } } export default MyComponent;
Mixins
使用ES6语法来创建组件是不支持React mixins的,如果一定要使用React mixins就只能使用React.createClass方法来创建组件了。
import React,{ Component } from 'react'; var SetIntervalMixin = { doSomething: function() { console.log('do somethis...'); }, }; const Contacts = React.createClass({ mixins: [SetIntervalMixin], handleClick() { this.doSomething(); //使用mixin }, render() { return ( <div onClick={this.handleClick}></div> ); } }); export default Contacts;
总结
总的来说使用ES6来创建组件的语法更加简洁,这种语法避免了过多的React样板代码,而更多的使用纯javascript语法,更符合javascript语法习惯。React官方并没有强制性要求使用哪种语法,根据需要合理的选择即可。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍利用ES6语法重构React组件详解,包括了利用ES6语法重构React组件详解的使用技巧和注意事项,需要的朋友参考一下 一、创建组件 ES6 class创建的组件语法更加简明,也更符合javascript。内部的方法不需要使用function关键字。 React.createClass React.Component(ES6) 二、属性 props propTypes and ge
本文向大家介绍ES6下React组件的写法示例代码,包括了ES6下React组件的写法示例代码的使用技巧和注意事项,需要的朋友参考一下 本文主要跟大家分享了ES6下React组件的写法示例,下面来一起看看详细的介绍: 一:定义React组件 二:声明prop类型与默认prop 三、设置初始state 四、自动绑定 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮
本文向大家介绍详解es6超好用的语法糖Decorator,包括了详解es6超好用的语法糖Decorator的使用技巧和注意事项,需要的朋友参考一下 Decorator(修饰器/装饰器)是es6提出的语法糖,用于修改类的行为。不过目前主流浏览器都没有很好的支持,我们需要用babel来转换为浏览器能识别的语言。在这篇文章中将介绍decorator的基础用法和一些应用实例。 1.修饰类 (1) 基础用法
我在React应用程序中注意到以下内容: 什么是在这里做什么?我知道它正在将子级传递给UserList组件,但是传播运算符在这里是如何工作的呢?它与和有什么交互作用?
问题内容: 我有Codepen代码,我正尝试仅使用三个文件index.html,main.js和style.css在网页上复制它们。我尝试将这些脚本加载到HTML文件的head标签上。 但是,它不起作用。我得到的只是这个错误 有什么必要的CDN脚本文件将此反应代码加载到HTML? 问题答案: 您需要使用脚本来反编译代码,并且需要包含的脚本,使用它们可以正常工作: 它与Codepen配合使用的原因:
本文向大家介绍深入浅析react native es6语法,包括了深入浅析react native es6语法的使用技巧和注意事项,需要的朋友参考一下 react native是直接使用es6来编写代码,许多新语法能提高我们的工作效率 解构赋值 这句代码是ES6 中新增的解构(Destructuring)赋值语句。准许你获取对象的多个属性并且使用一条语句将它们赋给多个变量。 上面的代码等价于: 再