当是重要的传球props
到super()
了,为什么?
class MyComponent extends React.Component {
constructor(props) {
super(); // or super(props) ?
}
}
只有一种原因需要传递props
给super()
:
当您要this.props
在构造函数中访问时。
通过:
class MyComponent extends React.Component {
constructor(props) {
super(props)
console.log(this.props)
// -> { icon: 'home', … }
}
}
未通过:
class MyComponent extends React.Component {
constructor(props) {
super()
console.log(this.props)
// -> undefined
// Props parameter is still available
console.log(props)
// -> { icon: 'home', … }
}
render() {
// No difference outside constructor
console.log(this.props)
// -> { icon: 'home', … }
}
}
注意,通过或不通过props
,以super
有 没有影响
对以后的用途this.props
之外constructor
。也就是说render
,shouldComponentUpdate
或事件处理程序
始终 可以访问它。
这是索菲·阿尔珀特(Sophie Alpert)对类似问题的回答中明确指出的。
建议使用“ 状态和生命周期,将本地状态添加到类,第2点”中的文档:
类组件应始终使用调用基本构造函数
props
。
但是,没有提供任何理由。我们可以推测它是由于子类化还是出于将来的兼容性。
(感谢@MattBrowne的链接)
什么时候将传递给是重要的,为什么?
问题内容: 假设我有以下课程: 我想知道是否传递以下构造函数很重要: 我当前的代码工作正常,但是我想知道这是否是一个好习惯。 问题答案: 根据React团队的Ben Alpert的说法,如果您打算在构造函数内部使用,则仅需要将prop传递给构造函数。调用构造函数后,React从外部将props附加到组件。
问题内容: 我对JS和React玩的不好。 此处的React文档指出以下内容: 在实现子类的构造函数时,应先调用其他语句。否则, 将在构造函数中未定义,这可能会导致错误。 我的问题是这实际上如何工作?在我的构造函数中神奇启用的功能是什么? 问题答案: 在您提到的文档中。它以javascript的ES6标准编码。 所以这句话 这意味着Greeting是从继承的,通过调用,您实际上是在使用参数调用父元
我知道这个问题被问了很多次,但仍然不清楚。很多人刚才说, 如果您想访问,请将道具传递给构造函数 答案的另一个例子 Oficial doc说类组件应该始终使用props调用基构造函数,但如果我们不将传递给,我们仍然会将放在除构造函数之外的所有地方。 同样从react源代码中,我们可以看到react.Component 但这更让我困惑应使用两个参数调用:和。但是我们调用了super-empty,仍然可
问题内容: 我意识到super关键字可用于调用父组件中的函数。但是,我不清楚您为什么在下面的示例中使用super关键字-只是将传递给构造器的所有prop传递给它。 有人可以回应一下在ES6类构造函数中使用super关键字的各种原因吗? 问题答案: super允许您访问父类的构造方法。包含props的唯一原因是在构造函数内部访问this.props。 使用es6类时,React中的“ super()
问题内容: 直接使用和直接使用父类名称之间有区别吗?例如: 是否有内部之间的差异和? 问题答案: 在 这种情况下 不是。但是 通常 ,尤其是当您使用 多重继承时 ,按照文档中指定 的 方法 委托给 方法解析顺序(MRO)中 的下一个对象 : 返回将方法调用委托给类型的父级或同级类的 代理对象 。这对于访问已在类中重写的继承方法很有用。搜索顺序与所使用的顺序相同,只是类型本身被跳过。 类型的 属性列