关键字' statics'的含义是什么?在ES5中

时间:2016-08-25 08:07:13

标签: javascript react-native

我封装了一个名为JellMenu的菜单,我想公开像JellMenu.Item而不是import CustomMenuItem这样的CustomMenuItem。我不知道该怎么做。

我查看了react-native-viewpager源代码,我认为这可能有用:

var ViewPager = React.createClass({
  statics: {
    DataSource: ViewPagerDataSource,
  },

它会将ViewPagerDataSource公开为ViewPager.DataSource,对吗?我不确切地知道。什么是Es5中关键字statics的含义,以及Es6中的替代品是什么?提前谢谢。

2 个答案:

答案 0 :(得分:2)

它不是关键字,它只是传递给React.createClass的对象初始值设定项中的属性名称。从the documentation开始,它用于指定React类的静态(非实例特定)部分:

  

statics对象允许您定义可在组件类上调用的静态方法。

答案 1 :(得分:0)

虽然statics仅适用于React.createClass,但您仍可以使用ES6表示法编写静态方法。如果您使用的是ES7,那么您也可以编写静态属性。statics对象允许您定义可以在组件类上调用的静态方法。例如:

var MyComponent = React.createClass({
  statics: {
    customMethod: function(foo) {
    return foo === 'bar';
  }
},
render: function() {

   }
});
MyComponent.customMethod('bar');  // true

此块中定义的方法是static,这意味着您可以在创建任何组件实例之前运行它们,并且这些方法无法访问您的propsstate组件。如果您想检查static method中道具的值,请callerprops as an argument传递给静态方法。

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

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

 static someMethod(){
 }
}

或者像这样的课外:

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

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