当前位置: 首页 > 面试题库 >

使用es6类时,React中的“ super()”和“ super(props)”有什么区别?

罗伟兆
2023-03-14
问题内容

当是重要的传球propssuper()了,为什么?

class MyComponent extends React.Component {
  constructor(props) {
    super(); // or super(props) ?
  }
}

问题答案:

只有一种原因需要传递propssuper()

当您要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。也就是说rendershouldComponentUpdate或事件处理程序
始终 可以访问它。

这是索菲·阿尔珀特(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)中 的下一个对象 : 返回将方法调用委托给类型的父级或同级类的 代理对象 。这对于访问已在类中重写的继承方法很有用。搜索顺序与所使用的顺序相同,只是类型本身被跳过。 类型的 属性列