注意:此帖已發佈到當時React不支持ES6(v12)。React和ES6繼承
我有一個ES6類:
class BaseClass {
getInitialState(){
return {message: 'Hello!'};
}
render() {
return (
<div>
<div>{this.state.message}</div>
</div>
)
}
}
我可以在ES6使用這個表達式(來源:react ES6 browserify)出口
export default React.createClass(BaseClass.prototype)
這工作得很好。現在我想用ES6繼承致以BaseClass
類:
class ExtendedClass extends BaseClass{
getInitialState(){
return {message: "Hello! I'm an extension"};
}
}
但是當我打電話React.createClass
在ExtendedClass
類,我得到了以下異常:
Invariant Violation: ReactCompositeComponentInterface: You are attempting to define `constructor` on your component more than once. This conflict may be due to a mixin.
我知道陣營0.13被認爲更ES6友好,但有什麼辦法來處理?
編輯:
我使用Traceur編譯我ES6類。爲ExtendedClass
輸出看起來像:
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);
getInitialState不應與ES6代碼中使用。相反,在構造函數中設置你的初始狀態,'constructor(props){super(props); this.state = {message:'Hello!'}}' – widged 2015-08-04 02:19:00
此帖已發佈在React不支持ES6(v12)的時間。它不再相關。當然,使用React v13一切正常,並且不需要使用提到的解決方法。 – JBE 2015-08-04 14:19:50