2016-01-20 7 views
5

Ich habe eine ES6-Klasse mit einem Dekorator. Es hat eine statische Methode foo. Wenn ich jedoch versuche, auf die statische Methode zuzugreifen, ist sie undefiniert.Statische Methode ist nicht definiert in ES6-Klassen mit einem Dekorator in reactjs

@withStyles(styles) 
class MyComponent extends Component { 
    static foo(){ 
     return "FOO"; 
    } 
    render(){ 
     var x = MyComponent.foo; // x=undefined 
    } 
} 

Wenn ich den Dekorateur entferne, kann ich auf die statische Methode zugreifen. Es ist nicht mehr undefiniert.

class MyComponent extends Component { 
    static foo(){ 
     return "FOO"; 
    } 
    render(){ 
     var x = MyComponent.foo; // x=foo() 
    } 
} 

Gibt es eine Problemumgehung für dieses Problem?

var MyComponent = (function() { 
    function MyComponent() { 
    _classCallCheck(this, _MyComponent); 
    } 

    _createClass(MyComponent, null, [{ 
    key: 'foo', 
    value: function foo() { 
     return "FOO"; 
    } 
    }]); 

    var _MyComponent = MyComponent; 
    Foo = withStyles(MyComponent) || MyComponent; 
    return MyComponent; 
})(); 

So sein Problem ist, dass withStyles(MyComponent) eine andere Funktion zurück, die offensichtlich nicht statische Methoden hat:

+0

Dekorierer sind nicht Teil von ES6/ES2015. Dies ist wahrscheinlich ein Fehler im verwendeten transpiler (babel?). –

+0

Was macht der Dekorateur? Entweder scheint dein Transpiler oder die Decorator-Implementierung fehlerhaft zu sein. – Bergi

+0

Diese [SO Antwort] (http://stackoverflow.com/questions/34766822/class-decorators-in-es-7?rq=1) erklärt, wie der withStyles Decorator funktioniert. – GunnerFan

Antwort

2

Wenn Sie mit babel mit es6, könnte es so (zu es5) transpiled werden für die ursprüngliche Klasse angegeben.

+0

Verstanden. Hast du dafür? – GunnerFan

+0

Diese [SO-Antwort] (http://stackoverflow.com/questions/34766822/class-decorators-in-es-7?q=1) erklärt, wie der withStyles Dekorateur funktioniert. – GunnerFan