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,
    };
  }
}
Другие вопросы по тегам