ReactJS: Каковы некоторые критерии отсутствия конструктора в классе компонентов?
Я хочу знать условия, когда конструктор не требуется в объявлении класса компонента. Я полагаю, что это для компонентов без состояния, но есть ли другие причины? Не будет ли, например, иметь какие-либо функции внутри компонента (кроме функций жизненного цикла)?
3 ответа
Я думаю, что было бы уместно просто оставить здесь выдержку из реагирующих документов (выделение мое):
Конструктор - это правильное место для инициализации состояния. Если вы не инициализируете состояние и не привязываете методы, вам не нужно реализовывать конструктор для вашего компонента React.
Обычно я добавляю конструктор только в том случае, если компонент имеет внутреннее состояние, которое мне нужно настроить перед его использованием, в противном случае я опускаю конструктор. Наличие функций в компоненте не влияет на мое решение в этом отношении
На самом деле вам вообще не нужен конструктор, если вы используете пресет babel stage-2, потому что он предоставляет свойства класса, которые эффективно заменяют его использование:
class Component extends React.Component {
constructor() {
this.state = {};
this.handleClick = this.handleClick.bind(this);
}
handleClick() { console.log('click'); }
}
становится
class Component extends React.Component {
state = {};
handleClick = () => console.log('click');
}
Игнорируя это, конструктор необходим, только если вам нужно привязать методы компонента к его контексту или если вам нужно инициализировать state
имущество.
Другой случай, если вам нужно что-то сделать с this.props
свойство класса, но React считает его анти-паттерном.
class Component extends React.Component {
constructor() {
this.state = {
// don't do this! anti-pattern! duplication of source of truth!
duplicatedState: this.props.myName,
};
}
}