我是react的新手,我注意到我们使用this.setState()
而不是使用super.setState()
我需要明确说明为什么我们使用它来调用超类方法?例如:
class Checkbox extends React.Component {
constructor(props) {
super(props)
this.state = {
checked: true
}
this.handleCheck = this.handleCheck.bind(this)
}
handleCheck() {
this.setState({
checked: !this.state.checked
})
}
render() {
var msg
if(this.state.checked) {
msg = "checked"
} else {
msg = "not checked"
}
return (
<div>
<input type="checkbox"
onChange={this.handleCheck}
defaultChecked={this.state.checked}/>
<p>This box is {msg}</p>
</div>
)
}
}
这就是JavaScript继承的工作方式。Checkbox
子类的实例原型地继承自React.Component
父类this.setState === super.setState
。
super.method
仅在子类中被覆盖时才应引用它,它通常发生在被覆盖的方法本身中:
method() {
super.method(); // inherit the behaviour from parent class
// do something else
}
否则,super.method()
可以将的使用视为语义错误,这表明开发人员并不了解继承机制。如果稍后将覆盖某个方法,则由于该原因该方法将不再使用(尽管在情况下不太可能使用setState
)。
使用super.method()
还要求开发人员知道父类的实现。正如在解释这个答案,只有父母的原型方法,但不是实例方法可作为super
。如果父类具有实例方法,
method = () => {...}
子类将继承它,this.method
但不会继承super.method
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句