简述super()和super(props)有什么区别?
super()
和 super(props)
都是在构造函数中调用父类(在 React 中通常是 React.Component
)的构造函数。但是它们之间有一些重要的区别:
super()
调用会创建一个父类的实例,但是它不会将父类的 props 属性初始化。这意味着,在构造函数中,你不能通过this.props
来访问到 props。然而,你仍然可以在其他方法(如render
)中通过this.props
访问到 props。-
super(props)
不仅会创建一个父类的实例,还会初始化父类的 props 属性。这意味着,你可以在构造函数中通过this.props
访问到 props。
举个例子:
class MyComponent extends React.Component {
constructor(props) {
super(); // 或者 super(props)
console.log(this.props); // 如果使用 super(),这里会打印 undefined。如果使用 super(props),这里会打印出 props 的值。
}
render() {
console.log(this.props); // 无论使用 super() 还是 super(props),这里都会打印出 props 的值。
// ...
}
}
在大多数情况下,我们会推荐使用 super(props)
,因为它可以让你在构造函数中通过 this.props
访问到 props,这可以使得代码更清晰和易于理解。