Ответ 1
В ES6 производные классы должны вызвать super()
если у них есть конструктор. В реакции все компоненты распространяются от класса Component.
Вам действительно не нужен конструктор для каждого класса ES6/react. Если пользовательский конструктор не определен, он будет использовать конструктор по умолчанию. Для базовых классов это:
constructor() {}
И для производных классов конструктор по умолчанию:
constructor(...args) {
super(...args);
}
Кроме того, необходимо вызвать super()
перед доступом к this
, так как this
не не инициализирован до super()
называется.
Существует несколько причин использовать настраиваемый конструктор в реакции. this.state =...
первых, вы можете установить начальное состояние внутри конструктора, используя this.state =...
вместо использования getInitialState
жизненного цикла getInitialState
.
Вы также можете связать методы класса внутри конструктора с помощью this.someClassMethod = this.someClassMethod.bind(this)
. На самом деле лучше привязать методы в конструкторе, так как они будут созданы только один раз. В противном случае, если вы вызываете bind
или используете функции со стрелками для привязки методов вне конструктора (например, в методе render
), это фактически приведет к созданию нового экземпляра функции для каждого рендеринга. Подробнее об этом читайте здесь.
Если вы хотите использовать this.props
в конструкторе, вам нужно вызвать super
с реквизитом в качестве аргумента:
constructor(props) {
super(props);
this.state = {count: props.initialCount};
}
Если вы этого не сделаете, то this.props
не определено в конструкторе. Тем не менее, вы все равно можете получить доступ к this.props
любом месте класса вне конструктора без необходимости ничего с ним делать в конструкторе.