React.Component与React.createClass
我很困惑组件和反应类之间的区别是什么?
什么时候在一个反应类上使用一个组件? 看起来像一个组件是一个类,createClass创build一个组件。
https://facebook.github.io/react/docs/top-level-api.html
React.Component
这是React Components使用ES6类定义的基类。 有关如何使用React的ES6类,请参阅可重用组件。 对于基类实际提供的方法,请参阅组件API。
React.createClass
根据规范创build一个组件类。 一个组件实现一个返回一个单独的孩子的渲染方法。 那个孩子可能有一个任意深的孩子结构。 使组件与标准原型类不同的一件事是,你不需要对它们调用新的东西。 他们是方便包装,为您构build支持实例(通过新的)。
唯一不被MyComponent extends React.Component
支持的React.createClass
functionMyComponent extends React.Component
是mixins。
要做getInitialState()
你可以这样做:
class MyComponent extends React.Component { constructor(props, context) { super(props, context); // initial state this.state = { counter: 0 }; } ... }
或者如果你使用像babel这样的翻译,你可以得到
class MyComponent extends React.Component { state = { counter: 0 } ... }
除了createClass提供的自动绑定之外,您可以使用.bind(this)
显式绑定,如上所示,或者使用胖箭头ES6语法:
class MyComponent extends React.Component { onClick = () => { // do something } ... }
不要把东西放在componentWillMount中,你可以把东西放在构造函数中,如下所示:
class MyComponent extends React.Component { constructor(props, context) { super(props, context); // what you would have put in componentWillMount } ... }
React文档本身还有更多的细节,但基本上React.createClass购买的唯一附加function是mixin,但afaik可以使用上下文和更高级的组件来完成。
他们是做同样的事情的两种方式。
React.createClass
是一个返回Component类的函数。
MyComponent = React.createClass({ ... });
React.Component
是您可以扩展的现有组件。 使用ES6时主要有用。
MyComponent extends React.Component { ... }
React.createClass
– 创build组件类的方法
为了更好地使用ES6模块,扩展了React.Component
,它扩展了Component类而不是调用createClass
两者之间几乎没有差别,
语法: React.createClass:
var MyComponent = React.createClass({ });
React.Component:
export default class MyComponent extends React.Component{ }
getInitialState(): React.createClass:是React.Component:否
构造函数(): React.createClass:无React.Component:是
propTypes语法: React.createClass:
var MyComponent = React.createClass({ propTypes: { } });
React.Component:
export default class MyComponent extends React.Component{ } MyComponent.prototypes = { }
默认属性: React.createClass:
var MyComponent = React.createClass({ getDefaultProps(): { return {} } });
React.Component:
export default class MyComponent extends React.Component{ } MyComponent.defaultProps = { }
状态: React.createClass:
State changes can be made inside getInitialState() function
React.Component:
State changes can be made inside constructor(props) function
这个 :
React.createClass:
automatically bind 'this' values. Ex: <div onClick={this.handleClick}></div> 'this' can be accessed by default in handleClick function
React.Component:
whereas here we need to bind explicitly, Ex: <div onClick={this.handleClick.bind(this)}></div>
这看起来像Reactbuild议我们使用React.createClass
我所知道的
-
MyComponent extends React.Component
不支持getInitialState()
-
在
React.createClass
使用.bind(this)
,你会得到这个警告:bind():您正在将组件方法绑定到组件。 React以高性能的方式自动执行此操作,因此您可以安全地删除此调用。
我想这可能不止于此。
如果有人列出所有的React.createClass
function将会如此之大。
注意:React目前在0.14.3