当前位置: 首页 > 知识库问答 >
问题:

制作react components es6语法时,为什么要使用道具进行超级初始化?[副本]

鞠通
2023-03-14

我想我不太擅长JavaScript。
这就是我所看到的初始化react组件的方式。初始设置状态在构造函数中完成。
导出类计数器扩展React.Component{constructor(props){super(props);this.state={count:props.initialCount};}

为什么总是有一个超级(道具)。这是必需的吗?打电话有必要吗?如果不叫super怎么办?

共有1个答案

陈野
2023-03-14

只有当您想在类的构造函数中访问this.props时,才需要在super中传递props。

class Base extends React.Component {

    constructor(props) {
        console.log('Base', props);
    }

    render() {
        return <div>Base {this.props.name}</div>;
    }

}

class Sub extends Base {

    constructor(props) {
        super({
            name: 'New name prop'
        });
        console.log('Sub', arguments);
    }

}

var sub = <Sub name="Gomic" />

React.render(sub, document.getElementById('container'));

默认情况下,不会在构造函数中指定道具。它们在方法React.createElement中分配。因此,只有当超类的构造函数手动将props分配给this.props时,才应该调用super(props)。当您只是扩展React.Component时,调用super(props)方法对props没有任何作用。

参考:

https://discuss.reactjs.org/t/should-we-include-the-props-parameter-to-class-constructors-when-declaring-components-using-es6-classes/2781/2

 类似资料:
  • 本文向大家介绍为什么要初始化 CSS 样式相关面试题,主要包含被问及为什么要初始化 CSS 样式时的应答技巧和注意事项,需要的朋友参考一下 因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对 CSS 初始化往往会出现浏览器之间的页面显示差异。 当然,初始化样式会对 SEO 有一定的影响,但鱼和熊掌不可兼得,但力求影响最小的情况下初始化。 最简单的初始化方法是:*{padding:

  • 这将打印出r1 r4 pre b1 b2 r3 r2 hawk 但我不明白为什么它打印r3 r2而不是r2 r3,这似乎是倒退的。如果初始化块是自上而下执行的,为什么它从底部语句r3开始,到R2结束呢?在超类Bird中,它的执行方式与我预期的b1和b2一样,从上到下,但在超类Raptor中,在构造函数运行之后,控件似乎首先跳转到最后一条语句,并将自己工作回顶部。有什么想法吗? 快把我逼疯了。

  • 我试图在循环中初始化数组C,但它给出了错误: C是类ipdata的数组,我已经声明了它,并试图在循环中初始化它。 有什么问题吗?它表示:无法访问cluster_anlysis类型的封闭实例。必须使用cluster_anlysis类型的封闭实例限定分配(例如,x.new A(),其中x是cluster_anlysis的实例)。

  • 我正在用ansible自动安装conda,但是激活conda的最后一步(conda init)失败了。 错误: “stderr”:“需要单个字符参数。”,“stderr_lines”:

  • 问题内容: print语句导致以下编译时错误, 局部变量f可能尚未初始化 如果Java中的原语已经具有默认值(float = 0.0f) ,为什么需要定义一个? 所以这有效 感谢大家! 问题答案: 因为它是一个局部变量。这就是为什么什么都没有分配的原因: 局部变量略有不同。编译器永远不会为未初始化的局部变量分配默认值。如果您无法在声明它的地方初始化本地变量,请确保在尝试使用它之前为其分配一个值。访

  • 考虑以下代码: 以下是一些引用的标准 拷贝初始化 从cppreference复制引用的初始化 如果object是lvalue表达式,其类型是T或从T派生的,且具有相等或较少CV限定性,则该引用绑定到由lvalue标识的对象或其基类子对象。 如果object是lvalue表达式,其类型隐式转换为T或从T派生的类型,具有相等或较少CV限定性,则考虑源类型及其基类返回lvalue引用的非显式转换函数,并