美文网首页
React中constructor(props){}究竟是什么

React中constructor(props){}究竟是什么

作者: Elliott_d3ae | 来源:发表于2018-08-09 15:50 被阅读0次

    在React Class中设置state的初始值或者绑定事件时

    为什么需要在 constructor(){} 中加上 super() 呢

    我们尝试去掉 super() 看看编译的结果:

    constructor() {

    this.state = {searchStr:''};

    this.handleChange =this.handleChange.bind(this);

    }

    运行这段代码时,会发现编译错误:

    提示没有在this之前加上super()

    其实就是少了super(),导致了this的 Reference Error

    classMyComponentextendsReact.Component{

    constructor() {

    console.log(this);// Reference Error

      }

      render() {

    return

    Hello {this.props.name};

      }

    }

    super关键字,它指代父类的实例(即父类的this对象)。子类必须在constructor方法中调用super方法,否则新建实例时会报错。这是因为子类没有自己的this对象,而是继承父类的this对象,然后对其进行加工。如果不调用super方法,子类就得不到this对象。

    正确的姿势应该是这样

    constructor() {

    super();

    this.state = {searchStr:''};

    this.handleChange =this.handleChange.bind(this);

    }

    React的官方例子中都是加上了 props 作为参数

    constructor(props) {

    super(props);

    this.state = {searchStr:''};

    this.handleChange =this.handleChange.bind(this);

    }

    那它们的区别在哪儿呢

    What's the difference between “super()” and “super(props)” in React when using es6 classes?

    借用下stackoverflow上的解释

    There is only one reason when one needs to passpropstosuper():

    When you want to accessthis.propsin constructor.

    (Which is probably redundant since you already have a reference to it.)

    意思是说

    只有一个理由需要传递props作为super()的参数,那就是你需要在构造函数内使用this.props

    那官方提供学习的例子中都是写成super(props),所以说写成super(props)是完全没问题的,也建议就直接这样写

    相关文章

      网友评论

          本文标题:React中constructor(props){}究竟是什么

          本文链接:https://www.haomeiwen.com/subject/ljhcbftx.html