2016-01-20 15 views
5

Ho una classe ES6 con un decoratore. Ha un metodo statico foo. Tuttavia quando provo ad accedere al metodo statico, è indefinito.Il metodo statico non è definito nelle classi ES6 con un decoratore in reactjs

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

Quando rimuovo il decoratore, posso accedere al metodo statico. Non è più indefinito.

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

Esiste una soluzione alternativa per questo problema?

+0

I decoratori non fanno parte di ES6/ES2015. Questo è probabilmente un bug nel transpiler che stai usando (babel?). –

+0

Cosa fa il decoratore? O il tuo transpiler o l'implementazione del decoratore sembra essere buggato. – Bergi

+0

Questa [risposta SO] (http://stackoverflow.com/questions/34766822/class-decorators-in-es7?rq=1) spiega come funziona il decoratore withStyles. – GunnerFan

risposta

2

Se stai usando babel con es6, potrebbe essere transpiled del genere (a es5):

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; 
})(); 

Così il suo problema è che withStyles(MyComponent) tornerà un'altra funzione che ovviamente non ha metodi statici voi specificato per la classe originale.

+0

Capito. Hai in giro per questo? – GunnerFan

+0

Questa [risposta SO] (http://stackoverflow.com/questions/34766822/class-decorators-in-es7?rq=1) spiega come funziona il decoratore withStyles. – GunnerFan

Problemi correlati