2016-08-25 6 views
0

私はJellMenuというメニューをカプセル化していて、JellMenu.ItemのようなCustomMenuItemをimport CustomMenuItemの代わりに公開したいと思います。どうやってやるのか分かりません。ES5でキーワード 'statics'とは何ですか?

私はreact-native-viewpagerソースコードを見ました、と私は、これは多分役に立つと思う:

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

それは右、ViewPager.DataSourceとしてViewPagerDataSourceを公開するのだろうか?私は正確にはわからない。 Es5のキーワードstaticsの意味は何ですか?そしてEs6の代替案は何ですか?前もって感謝します。

+3

'statics'はキーワードではありません。 – nnnnnn

+0

@nnnnnn:いいえ、反応するものです(そして、ES5には「静的」がありませんでした。厳格なモードでは、将来の予約語として予約しました)。 –

答えて

2

キーワードではなく、オブジェクト初期化子のプロパティ名はReact.createClassに渡されます。 the documentationから、リアクトクラスの静的(非インスタンス固有)の部分を指定するために使われています:

staticsオブジェクトは、コンポーネントクラス上で呼び出すことができる静的メソッドを定義することができます。

+0

'React.createClass'の代わりに' class xx extends Component'で使用したいのですが、どうしたらいいですか? – CoderLim

+0

@CoderGLM:私はReactについて詳しくは分かりませんが、ES2015( "ES6")以上では、それぞれの静的メソッドを個別に指定します: 'class xx extends Component {static foo (){}} '。 ES2015にはまだ静的フィールドはありません(ただし、[提案](https://tc39.github.io/proposal-class-public-fields/)です)。 –

0

staticsReact.createClassでしか動作しますが、ES6表記で静的メソッドを書き込むことはできます。 ES7を使用している場合は、静的プロパティも記述できます。staticsオブジェクトでは、コンポーネントクラスで呼び出すことができる静的メソッドを定義できます。たとえば:

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

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

このブロック内で定義された方法は、任意のコンポーネントのインスタンスが作成される前に、あなたがそれらを実行することができ、および方法は、あなたのコンポーネントのpropsまたはstateへのアクセスを持っていないことを意味し、staticです。 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(){....} 
関連する問題