用ES6类来反应静态

nif*_*fty 46 ecmascript-6 reactjs

静态对象是否适用于React中的ES6类?

class SomeComponent extends React.Component {

  render() {
    // ...
  }

}

React.statics = {
  someMethod: function() {
    //...
  }
};
Run Code Online (Sandbox Code Playgroud)

像上面的东西给我未定义的方法someMethod,当我做SomeComponent.someMethod()

Fel*_*ing 61

statics只适用于React.createClass.只需将方法声明为静态类方法:

class SomeComponent extends React.Component {

  static someMethod() {
    //...
  }

  render() {
    // ...
  }

}
Run Code Online (Sandbox Code Playgroud)

关于

React.statics = { ... }
Run Code Online (Sandbox Code Playgroud)

您实际上是staticsReact对象上创建属性.该属性不会神奇地扩展您的组件.

  • 请注意,babel和jsx工具支持静态属性(例如`static propTypes = {...}`); 但只是ES7提案.静态方法是ES6. (2认同)

Jon*_*ang 24

虽然statics只适用于React.createClass,但您仍然可以使用ES6表示法编写静态方法.如果您使用的是ES7,那么您也可以编写静态属性.

您可以这样在ES6 +类中编写静态:

class Component extends React.Component {
    static propTypes = {
    ...
    }

    static someMethod(){
    }
}
Run Code Online (Sandbox Code Playgroud)

或者像这样的课外:

class Component extends React.Component {
   ....
}

Component.propTypes = {...}
Component.someMethod = function(){....}
Run Code Online (Sandbox Code Playgroud)

如果你想像前者一样写它,那么你必须设置stage: 0Babel(自实验以来).

  • 为了使用ES7你必须'npm install babel-preset-stage-0`然后将``stage-0``添加到.babelrc中:`{"presets":["es2015","react", "0级"]}` (3认同)