Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
542 views
in Technique[技术] by (71.8m points)

reactjs - React.Component vs React.createClass

I am confused whats the difference between a component and a react class?

And when do I use a component over a react class? Looks like a component is a class and createClass creates a component.

https://facebook.github.io/react/docs/top-level-api.html

React.Component

This is the base class for React Components when they're defined using ES6 classes. See Reusable Components for how to use ES6 classes with React. For what methods are actually provided by the base class, see the Component API.

React.createClass

Create a component class, given a specification. A component implements a render method which returns one single child. That child may have an arbitrarily deep child structure. One thing that makes components different than standard prototypal classes is that you don't need to call new on them. They are convenience wrappers that construct backing instances (via new) for you.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

The only React.createClass functionality that isn't supported by MyComponent extends React.Component is mixins.

to do getInitialState() you can do:

class MyComponent extends React.Component {
  constructor(props, context) {
    super(props, context);

    // initial state
    this.state = {
      counter: 0
    };
  }

  ...
}

or if you use a transpiler like babel, you can get

class MyComponent extends React.Component {
  state = {
    counter: 0
  }

  ...
}

Instead of auto-binding provided by createClass, you could explicitly bind using .bind(this) like you have shown above, or use the fat arrow ES6 syntax:

class MyComponent extends React.Component {
  onClick = () => {
    // do something
  }
  ...
}

Instead of putting things in componentWillMount, you could put things in constructor like so:

class MyComponent extends React.Component {
  constructor(props, context) {
    super(props, context);

    // what you would have put in componentWillMount
  }

  ...
}

There are way more details in the React documentation themselves, but basically the only additional functionality that React.createClass buys is mixins, but afaik anything you could have done with mixins can be done with context and higher ordered components.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...