React写法用: ES5(createClass)还是ES6(class)?
React可以用ES5或ES6完美书写,使用JSX意味着你将通过Babel将JSX通过“build”转化为React.createElement
调用。很多人利用这个特点在Babel的编译列表中添加一些es2015的语法以此来让ES6完全可用。
比较createClass和class
以下是使用React.createClass
和ES6的class
书写相同的组件:
|
|
|
|
比较两种写法的不同点
函数的绑定
使用createClass
,每个函数属性都会被React自动绑定,指的是this.eventFn
这样的函数在任何你需要调用的时候都会自动为你绑定正确的this
。
在ES6的class
中,就不同了:函数需要我们去手动绑定它们
另一种方式就是在你使用的地方通过内联来绑定
构造函数应该调用super
es6类的constructor需要接收props
并且调用super(props)
。这是createClass
所没有的一点
class和createClass的比较
这个很明显,一个调用React.createClass
并传入一个对象,另一个则是使用class继承React.Component
。
小提示: 导入Component时如果在一个文件里包含多个组件,可以直接通过以下方式节省一些代码量:
|
|
初始化State的设置
createClass
接受一个只会在组件被挂载时才会调用一次的initialState
函数。
ES6 的class
则使用构造函数。在调用super
之后,可以直接设置state。
JSX中的if-else
你没法在JSX中使用 if-else 语句,因为 JSX 只是函数调用和对象创建的语法糖
用三元操作表达式
|
|
用比较运算符“ || ”
|
|
用变量来书写
|
|
内联判断,用立即调用函数表达式
|
|