javascript - 静态方法在 ES6 类中未定义,在 reactjs 中带有装饰器

标签 javascript reactjs ecmascript-2016

我有一个带有装饰器的 ES6 类。它有一个静态方法 foo。但是,当我尝试访问静态方法时,它是未定义的。

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

当我删除装饰器时,我可以访问静态方法。它不再是未定义的。

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

这个问题有解决方法吗?

最佳答案

如果你将 babeles6 一起使用,它可以像这样被转译(到 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;
})();

所以它的问题是 withStyles(MyComponent) 将返回另一个函数,该函数显然没有您为原始类指定的静态方法。

关于javascript - 静态方法在 ES6 类中未定义,在 reactjs 中带有装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34901860/

相关文章:

javascript - 在将其添加到列表之前更新状态

javascript - (_.merge in ES6/ES7)Object.assign without overriding undefined values

javascript - 在使用 create-react-app 的 React 应用程序中填充 ES6 功能的最佳方法

javascript - 用于文档预览的 Jquery 脚本?

javascript - 按正则表达式拆分产量 "undefined"

javascript - React.memo prevProps 总是与 nextProps 不同,即使 props 永远不会改变

javascript - 如何在 ReactJS 中使用 const

javascript - 在 JavaScript 中,有没有一种方法可以以编程方式允许浏览器在无限循环内接收用户事件?

javascript - Google 登录 API 不适用于 Mozilla Firefox

javascript - ng-show 不适用于 UnderscoreJS 的 _.isNull 但适用于 val === null