[react] `super()`和`super(props)`有什么区别?

haizhilin2013
2019-07-17 04:56:11 星期三
react
                    
                        
`super()`和`super(props)`有什么区别?
Comments per page
< Page 1 / 1 >
tiyunchen 2019-07-18 04:33:00

super() 可以让我们使用this来调用各种东西,
而super(props)可以让我们在this的基础上使用构造函数里面的东西, 或者从父元素那边传过来的一些属性

mixj93 2019-09-02 08:49:22

如果只调用了super(),那么this.propssuper()和构造函数结束之间仍是undefined

class Button extends React.Component {
  constructor(props) {
    super(); // 没有传 props
    console.log(props);      // {}
    console.log(this.props); // undefined 
  }
  // ...
}
MagicalBridge 2019-09-21 02:30:52

react 中的class 是基于es6的规范实现的, 继承是使用extends关键字实现继承的,子类必须在constructor()中调用super() 方法否则新建实例
就会报错,报错的原因是 子类是没有自己的this对象的,它只能继承父类的this对象,然后对其进行加工,而super()就是将父类中的this对象继承给子类的,没有super() 子类就得不到this对象。

如果你使用了constructor就必须写super() 这个是用来初始化this的,可以绑定事件到this上
如果你想要在constructor中使用this.props,就必须给super添加参数 super(props)
注意,无论有没有 constructor,在render中的this.props都是可以使用的,这是react自动附带的
如果没有用到constructor 是可以不写的,react会默认添加一个空的constroctor.

wjrhyw 2020-04-20 09:29:57

根据es6的规定,子类自己的构造函数中必须调用super,才能获得自己的this;所以只是super()的话,只能够让子类获取自己的this;但是props会是Undefined,如果传递了props给super,那么才会初始化子类自己的props

shuch 2020-05-04 09:20:30
LiFeng007 2020-10-15 01:02:32

es6规定了子类中如果使用constructor构造函数,在super调用之前是没有自己的this,调用super用来初始化子类的this,至于在super中传props是为了可以通过this.props的形式访问父组件传过来的props

Comments per page
< Page 1 / 1 >
排行榜
今日答题答题排行
    未答的题
    更多>
      【关注作者公众号】 以面试驱动学习--前端剑解
      【公众号推荐】 不折腾的前端和咸鱼有什么区别

      学习不打烊,充电加油只为遇到更好的自己,365天无节假日,每天早上5点纯手工发布前端知识点(死磕自己,愉悦大家)。希望大家在这浮夸的前端圈里,保持冷静,坚持每天花20分钟来学习与思考。在这千变万化,类库层出不穷的前端,建议大家不要等到找工作时,才狂刷题,提倡每日学习!欢迎大家关注3+1开源项目!希望大家每人去学习与思考!(不要为了谁而来,要为自己而努力!

      【关注官方公众号】 每天4:30-5:00推送
      【公众号推荐】 一起折腾前端算法
      【微信学习群】 备注3+1