React中super()和super(props)的区别小结

 更新时间:2024年03月11日 09:41:40   作者:前端小超人rui  
本文主要介绍了React中super()和super(props)的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1. ES6类

在ES6中,通过extends关键字实现类的继承,方式如下:

class sup{
    constructor(name){
        this.name=name;
    }
    printName(){
        console.log(this.name)
    }
}
class sub extends sup{
    constructor(name,age){
        super(name) //super 代表的是父类的构造函数
        this.age=age;
    }
    printAge(){
        console.log(this.age)
    }
}
let rui=new sub('rui',21);
rui.printAge() //21
rui.printName() //rui

在上面的例子在子中,可以看到通过super关键字实现调用父类,super代替的是父类的构建函数,使用super(name)相当于调sup.prototype.constructor.call(this.name)

如果在子类中不使用super关键字,则会引发报错
报错的原因是 子类没有自己的this对象,它只能继承父类的this对象,然后对其进行加工而super()就是将父类中的this对象继承给子类的,没有super()子类就得不到this对象

如果先调用this ,再初始化super(),同样是禁止的行为
所以在子类的constructor 中 ,必须先用super 才能引用this

2. 类组件

在React中,类组件是基于es6的规范实现的,继承React.Component,因此如果用到constructor就必须写super()才初始化this

这时候,在调用super()的时候,我们一般都需要传入props作为参数,如果传不进去,React内部也会将其定义在组件实例中

// React 内部
const instance = new YourComponent(props);
instance.props = props;

所以无论有没有constructor,在render中this.props都是可以使用的,这是React自动附带的,是可以不写的

class HelloMessage extends React.Component{
    render(){
        return <div>hello {this.props.name}</div>
    }
}

但是也不建议使用super()代替super(props)因为在React会在类组件构造函数生成实例后再给this.props附值,所以 不传递props在super的情况下,调用this.props为undefined,情况如下:

class Button extends React.Component{
    constructor(props){
        super() //没传入props
        console.log(props) //{}
        console.log(this.props) //undefined
    }
}

而传入props的则都能正常访问,确保了this.props在构造函数执行完毕之前已经被赋值,更符合逻辑

class Button extends React.Component{
    constructor(props){
        super(props) /
        console.log(props) //{}
        console.log(this.props) //{}
    }
}

3. 总结

在React 中,类组件基于ES6,所以在constructor中必须使用super在调用super过程,无论是否传入props,React内部都会将props赋值给组件实例props属性中,如果调用了super(),那么this.props在super和构造函数结束之间仍然是undefined

到此这篇关于React中super()和super(props)的区别小结的文章就介绍到这了,更多相关React super()和super(props)内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • React-redux 中useSelector使用源码分析

    React-redux 中useSelector使用源码分析

    在一个 action 被分发(dispatch) 后,useSelector() 默认对 select 函数的返回值进行引用比较 ===,并且仅在返回值改变时触发重渲染,,这篇文章主要介绍了React-redux 中useSelector使用,需要的朋友可以参考下
    2023-10-10
  • React实现二级联动的方法

    React实现二级联动的方法

    这篇文章主要为大家详细介绍了React实现二级联动的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • react如何解决Hooks闭包陷阱解决方案

    react如何解决Hooks闭包陷阱解决方案

    在React中使用Hooks时,开发者可能会遇到一些常见的坑点,这篇文章主要介绍了react如何解决Hooks闭包陷阱的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2026-05-05
  • react component changing uncontrolled input报错解决

    react component changing uncontrolled in

    这篇文章主要为大家介绍了react component changing uncontrolled input报错解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • react项目使用redux初始化方式

    react项目使用redux初始化方式

    这篇文章主要介绍了react项目使用redux初始化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 详解各版本React路由的跳转的方法

    详解各版本React路由的跳转的方法

    这篇文章主要介绍了详解各版本React路由的跳转的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • React避免不必要的重新渲染的方法示例

    React避免不必要的重新渲染的方法示例

    构建高性能 React 应用程序的关键之一是避免不必要的重新渲染,React 的渲染引擎是高效的,但防止在不需要的地方重新渲染仍然至关重要,在这篇文章中,我们将介绍常见错误以及如何避免它们,需要的朋友可以参考下
    2024-10-10
  • 可定制react18 input otp 一次性密码输入组件

    可定制react18 input otp 一次性密码输入组件

    这篇文章主要为大家介绍了可定制react18 input otp 一次性密码输入组件,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 浅谈箭头函数写法在ReactJs中的使用

    浅谈箭头函数写法在ReactJs中的使用

    这篇文章主要介绍了浅谈箭头函数写法在ReactJs中的使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • 聊一聊我对 React Context 的理解以及应用

    聊一聊我对 React Context 的理解以及应用

    这篇文章主要介绍了聊一聊我对 React Context 的理解以及应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04

最新评论