用ES6类来反应静态

时间:2015-04-03 13:28:10

标签: reactjs ecmascript-6

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

class SomeComponent extends React.Component {

  render() {
    // ...
  }

}

React.statics = {
  someMethod: function() {
    //...
  }
};

当我执行someMethod

时,上面的内容为我提供了未定义的方法SomeComponent.someMethod()

4 个答案:

答案 0 :(得分:60)

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

class SomeComponent extends React.Component {

  static someMethod() {
    //...
  }

  render() {
    // ...
  }

}

关于

React.statics = { ... }

您实际上是在statics对象上创建React属性。该属性不会神奇地扩展您的组件。

答案 1 :(得分:23)

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

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

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

    static someMethod(){
    }
}

或者像这样的课外:

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

Component.propTypes = {...}
Component.someMethod = function(){....}

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

答案 2 :(得分:1)

无需实例化组件即可访问统计信息。通常情况下,它们没有什么用处,但是有一些特殊情况。例如,当您通过执行ACTION PERFORM离开当前页面时进入路由,然后通过Statics方法,您可以保留/询问用户是否真的要离开该页面。 例如:

exampleComponent= React.createClass({
statics:{
        willTransitionFrom: function(transition,component){
            // check any state here or value Aasked the user.
        }
    }
});

它公开了生命周期方法willTransitionTo和willTransitionFrom 。两者都作为静态变量特别有用,因为您实际上可以在实例化组件之前取消过渡。

答案 3 :(得分:-6)

statics仅适用于React组件check docs