2016-01-20 29 views
5

'da bir dekoratör ile ES6 sınıflarında tanımsızdır Bir dekoratöre sahip bir ES6 sınıfına sahibim. Statik bir metodu vardır. Ancak statik yönteme erişmeye çalıştığımda, tanımsız.Statik yöntem, RE6

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

Dekondörü kaldırdığımda statik yönteme erişebilirim. Artık tanımlanmamış.

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

Bu sorun için bir çözüm var mı? Eğer es6 ile babel kullanıyorsanız

+0

Dekoratör, ES6/ES2015 ürününün bir parçası değildir. Bu muhtemelen kullandığınız transpilerdeki bir hatadır (babel?). –

+0

Dekoratör ne yapar? Transpiler veya dekoratör uygulamanız buggy gibi görünüyor. – Bergi

+0

Bu [SO cevabı] (http://stackoverflow.com/questions/34766822/class-decorators-in-es7?rq=1) withStyles dekoratörünün nasıl çalıştığını açıklar. – GunnerFan

cevap

2

, bu (es5 kadar) böyle transpiled edilebilir:

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

Yani onun sorunu withStyles(MyComponent) besbelli statik yöntemler size sahip değil başka işlev döndürecek olmasıdır orijinal sınıf için belirtildi.

+0

Anladım. Bunun için var mı? – GunnerFan

+0

Bu [SO cevabı] (http://stackoverflow.com/questions/34766822/class-decorators-in-es7?rq=1) withStyles dekoratörünün nasıl çalıştığını açıklar. – GunnerFan