2015-04-03 78 views
38

靜態對象是否與React中的ES6類一起使用?使用ES6類反應靜態結構

class SomeComponent extends React.Component { 

    render() { 
    // ... 
    } 

} 

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

喜歡的東西上面給我未定義的方法someMethod當我做SomeComponent.someMethod()

回答

50

statics只適用於React.createClass。簡單地聲明方法爲靜態類方法:

class SomeComponent extends React.Component { 

    static someMethod() { 
    //... 
    } 

    render() { 
    // ... 
    } 

} 

關於

React.statics = { ... } 

你是從字面上創建React對象的statics屬性。該屬性不是神奇擴展你的組件。

+2

請注意,babel和jsx工具支持靜態屬性(例如'static propTypes = {...}');但只是一個ES7提案。靜態方法是ES6。 – FakeRainBrigand 2015-04-03 23:58:14

+0

這樣做我總是會得到'無法讀取屬性'_currentElement'的null'錯誤,而沒有使用靜態修飾符的相同方法正常工作。我在我的方法中沒有使用任何類變量... – abimelex 2017-04-04 08:01:57

-5

statics僅適用於反應的組分,check docs

+4

OP沒有反應組分嗎? – 2015-04-03 14:02:57

+1

這就是你的答案。什麼是OP? – Roman 2015-04-03 16:08:04

+1

「OP」是指問題或寫出問題的人。也許你說的有點奇怪,因爲這絕對是一個React組件。它不是用'React.createClass'創建的。 – 2015-04-03 16:20:21

21

雖然statics只適用於React.createClass,但您仍然可以使用ES6表示法編寫靜態方法。如果您使用的是ES7,那麼您也可以編寫靜態屬性。

你可以寫靜ES6 +類中這樣說:

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

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

如果你想將它寫像前,那麼你必須設置:

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

    static someMethod(){ 
    } 
} 

或者類這樣的外巴貝爾上的stage: 0(因爲它的實驗)。

+1

請注意,'propTypes = ...'不是ES6表示法。 – Bergi 2015-07-21 02:28:28

+1

你是對的,這似乎是ES7屬性初始化符號。 http://facebook.github.io/react/blog/2015/01/27/react-v0.13.0-beta-1.html#es7-property-initializers – 2015-07-21 06:30:46

+3

爲了使用ES7你必須'npm install babel -preset-stage-0「,然後將'stage-0''添加到.babelrc中,如下所示:'{」presets「:[」es2015「,」react「,」stage-0「]} – emisilva 2016-08-11 15:41:01