在制作反应组件es6语法时,为什么要使用props进行超级初始化?

时间:2016-02-04 05:46:59

标签: javascript reactjs

我想我并不擅长JavaScript 这就是我看到反应组件初始化的方式。初始设置状态在构造函数内完成 export class Counter extends React.Component { constructor(props) { super(props); this.state = {count: props.initialCount}; }

为什么总是super(props)。这需要吗?打电话超级必要吗?如果没有被称为超级会怎么样?

1 个答案:

答案 0 :(得分:2)

如果你想在类的构造函数中访问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中被赋值。因此,只有当超类的构造函数手动将super(props)传递给props时,才应调用this.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