原博文地址: http://cheng.logdown.com/posts/2016/03/26/683329ide
當咱們像下面這樣使用React
的ES6
class語法建立一個組件的時候:post
class MyClass extends React.component { constructor(){ super() } }
不由會提出兩個問題:this
在constructor
裏面調用super
是不是必要的?code
super
與super(props)
的區別?component
僅當存在constructor的時候必須調用super
,若是沒有,則不用get
若是在你聲明的組件中存在constructor
,則必需要加super
,舉個栗子:it
class MyClass extends React.component { render(){ return <div>Hello { this.props.world }</div>; } }
這段代碼完美無誤,你不須要爲之去調用super
,然而,若是在你的代碼中存在consturctor
,那你必須調用:console
class MyClass extends React.component { constructor(){ console.log(this) //Error: 'this' is not allowed before super() } }
之因此會報錯,是由於若不執行super
,則this
沒法初始化。class
你也許會抱着僥倖心理猜想:那我直接寫個空的constructor
就得了唄~,然而,在ES6
中的class
語法中,只要你的class
是子類,那必須得調用super
,換句話說,有constructor
就得有super
(固然,子類也能夠沒有constructor
)語法
僅當你想在constructor
內使用props纔將props
傳入super
。React
會自行props
設置在組件的其餘地方(以供訪問)。
將props
傳入super
的做用是能夠使你在constructor
內訪問它:
class MyClass extends React.component{ constructor(props){ super(); console.log(this.props); // this.props is undefined } }
完善後:
class MyClass extends React.component{ constructor(props){ super(props); console.log(this.props); // prints out whatever is inside props } }
若是你只是想在別處訪問它,是沒必要傳入props
的,由於React
會自動爲你設置好:
class MyClass extends React.component{ render(){ // There is no need to call `super(props)` or even having a constructor // this.props is automatically set for you by React // not just in render but another where else other than the constructor console.log(this.props); // it works! } }