2016-08-17 31 views
-1

爲什麼你需要在下面的例子中有超級?它真的從React.Component中獲取它需要對道具做什麼?爲什麼超級必要如果你已經將CommentList從React.Component中擴展出來 - 是不是傳入構造函數的道具已經被傳遞給了React.Component?使用超級擴展React.Component的目的是什麼?

class CommentList extends React.Component { 
    constructor(props) { 
    super(props); 
    this.state = { comments: [] } 
    } ... 
} 

回答

0
class CommentList extends React.Component { 
    constructor(props) { 
    console.log(this) // Error 
    } 
} 

this未初始化直到super()被稱爲

1

後,這是關於繼承的面向對象編程(OOP)的概念。

類可以繼承父類的方法和屬性(在你的情況CommentList從React.Component繼承[因此關鍵字extends])

但是,當你的名字有相同名稱的方法與新類,父類的方法被覆蓋。

這個想法也適用於構造器(這是在實例化上運行的方法)。

按照OOP的性質,當您在CommentList上聲明構造函數時,您覆蓋了React.Component的構造方法。

因此,您需要調用super()以確保父項的構造函數也使用道具。 (因此超級(道具))。