我正在使用普通構造函數重構基於es6類的React組件,然後綁定方法並在該構造方法中定義狀態/屬性。事情是這樣的:React中仍然需要使用自動綁定和屬性初始值設定項的構造函數
class MySpecialComponent extends React.Component {
constructor(props) {
super(props)
this.state = { thing: true }
this.myMethod = this.myMethod.bind(this)
this.myAttribute = { amazing: false }
}
myMethod(e) {
this.setState({ thing: e.target.value })
}
}
我想重構這個讓我自動綁定功能,並使用屬性初始化的狀態和屬性。現在,我的代碼看起來是這樣的:
class MySpecialComponent extends React.Component {
state = { thing: true }
myAttribute = { amazing: false }
myMethod = (e) => {
this.setState({ thing: e.target.value })
}
}
我的問題是,我還需要構造函數?或者這些道具也是自動飛行的?我本來希望仍然需要構造函數,幷包含super(props)
,但我的代碼似乎正在工作,我很困惑。
感謝
如果您沒有定義構造函數,則會自動使用傳遞的參數調用父構造函數。 'constructor(... args){super(... args); }'基本上是默認的構造函數。 –
如果組件的狀態依賴於它的道具,你將在構造函數中進行必要的初始化。如果不管道具如何,狀態都是相同的,例如你的例子就是這種情況,那麼你很樂意跟你寫的東西走。 –
注意,所有這些事情仍然發生在構造函數內部,它只是不同的語法。這可能有點令人困惑。另外,如果你想從參數值初始化你的實例,你仍然需要一個'構造函數'定義,但是無論如何,無論如何,所有東西都會被拋入到'props'對象中。 – Bergi