React- und ES6-Vererbung

Hinweis Dieser Beitrag wurde zu dem Zeitpunkt gepostet, als React ES6 (v12) NICHT unterstützte.

Ich habe eine ES6-Klasse:

class BaseClass {
  getInitialState(){
      return {message: 'Hello!'};
  }

  render() {
      return (
            <div>
                <div>{this.state.message}</div>
            </div>
        )
  }
}

Das kann ich mit diesem Ausdruck in ES6 exportieren (Quelle:react ES6 browserify)

export default React.createClass(BaseClass.prototype)

Dies funktioniert gut. Jetzt möchte ich die ES6-Vererbung verwenden, um mein @ zu erweiterBaseClass class:

class ExtendedClass extends BaseClass{
    getInitialState(){
        return {message: "Hello! I'm an extension"};
    }
}

Aber wenn ich @ anruReact.createClass auf derExtendedClass Klasse, ich habe die folgende Ausnahme:

Invariant Violation: ReactCompositeComponentInterface: You are attempting to define `constructor` on your component more than once. This conflict may be due to a mixin.

Ich weiß, dass React 0.13 ES6-freundlicher sein soll, aber gibt es Möglichkeiten, damit umzugehen?

BEARBEITEN

Ich verwende Traceur, um meine ES6-Klassen zu kompilieren. Die Ausgabe fürExtendedClass sieht aus wie

function ExtendedClass() {
  "use strict";
  if (BaseClass !== null) {
    BaseClass.apply(this, arguments);
  }
}
for (BaseClass____Key in BaseClass) {
    if (BaseClass.hasOwnProperty(BaseClass____Key)) {
      ExtendedClass[BaseClass____Key] = BaseClass[BaseClass____Key];
    }
  }
  ____SuperProtoOfBaseClass = BaseClass === null ? null : BaseClass.prototype;
  ExtendedClass.prototype = Object.create(____SuperProtoOfBaseClass);
  ExtendedClass.prototype.constructor = ExtendedClass;
  ExtendedClass.__superConstructor__ = BaseClass;
  ExtendedClass.prototype.getInitialState = function() {
    "use strict";
    return {message: "Hello! I'm an extension"};
  };
  React.createClass(ExtendedClass.prototype);

Antworten auf die Frage(4)

Ihre Antwort auf die Frage