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.createClassfunctionMyComponent 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

我所知道的

  1. MyComponent extends React.Component不支持getInitialState()

  2. React.createClass使用.bind(this) ,你会得到这个

    警告:bind():您正在将组件方法绑定到组件。 React以高性能的方式自动执行此操作,因此您可以安全地删除此调用。

我想这可能不止于此。

如果有人列出所有的React.createClassfunction将会如此之大。

注意:React目前在0.14.3