react 有状态组件中的constructor和super理解

关于有状态组件中的super(props),1.为什么要使用super();2.为什么要传入props?
有状态组件例如:

class Home extends React.Component {
    constructor(props) {
        super(props);
    };
    render() {
        return (
            <Header/>  //也可以写成<Header></Header>
        )
    }
}

1.为什么要使用super()?

调用super()方法来获取子类(Home)的实例。也就是说,仅仅声明Home是一个类,无法获得使用Home时<Home/>的属性props。有一个方法解决这个问题,那就是从<Home/>的父类React.Component那里去访问。因此需要用到Es6类的继承,这就需要super()来实现。

super()允许访问和调用父类中的成员,它会调用一次父类的构造函数。必须在使用this前调用。

2.为什么要传入props?

Home子类中要通过this使用React.Componentprops对象,同样也需要继承,这需要super(props)来完成。也就是说,通过super(props)得到了this对象。此时,construtor()中的this指向子类。
其实我们也可以不传props,这时无法通过this来访问。可以通过形参props.xx来访问。
在这里插入图片描述总之,如果不传入props,我们将无法访问子组件实例传过来的props。

我们进一步讨论以下问题,3.为什么construtor()中,state可以通过this访问;4.为什么在render()中使用this时,不需要使用super()或者先绑定呢。

3.为什么construtor()中,state可以通过this访问?

与props不同,this.state={}是在定义Clock原型上的对象,因此是可以直接使用this的。

4.为什么在render()中使用this时,不需要使用super()或者先绑定呢?

无论有没有constructor中的一系列this的继承操作, render中都可以使用this.props, react默认自带。这是因为render是原型上的方法,使用this当然可以。打印出原型,我们可以看到render是一个函数,而constructor是一个类。
在这里插入图片描述

【总结】 construtor()中props参数和super中的props同时传,但不是必须的。如果你不在构造函数中用this.props和props,完全可以不用传参。反之就要传参。但是对于this.props和props来说获取到的值都是一样的,所以写哪个都可以。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值