PassFront
  1. PassFront
  2. База знаний
  3. Компоненты

Что такое классовые компоненты?

Компоненты

Классовые компоненты — способ объявления компонентов через ES6-классы, наследующие React.Component. До появления хуков (2019) — единственный полноценный вид компонентов.

Устройство

class Counter extends React.Component {
  state = { count: 0 };                      // состояние — объект

  componentDidMount() {                       // жизненный цикл — методы
    console.log('смонтирован');
  }

  handleClick = () => {                       // обработчик — поле класса
    this.setState({ count: this.state.count + 1 }); // обновление с мерджем
  };

  render() {                                  // обязательный метод
    return (
      <button onClick={this.handleClick}>
        {this.props.label}: {this.state.count}
      </button>
    );
  }
}

Основные элементы: props через this.props, состояние в this.state (обновление только через this.setState, который мерджит поля и планирует ререндер), методы жизненного цикла (componentDidMount/DidUpdate/WillUnmount и другие), обязательный render().

Особенности и отличия от функциональных

  • setState мерджит объект (у useState сеттер заменяет значение) и рендерит без сравнения значений.
  • Проблема this: методы требуют bind или полей-стрелок.
  • this.props/this.state всегда «актуальные» — в отличие от замыканий-снимков в функциях.
  • Оптимизация — PureComponent/shouldComponentUpdate.
  • Переиспользование логики — только HOC/render props (главная причина перехода на хуки).

Статус сегодня

Легаси: новый код пишут на функциях с хуками. Классы остаются в старых кодовых базах и в одном актуальном сценарии — Error Boundaries (componentDidCatch/getDerivedStateFromError не имеют хук-аналогов).

Коротко для собеседования

Классовый компонент — class extends React.Component с render(), this.state/setState (мердж) и методами жизненного цикла. Против функциональных: многословнее, проблемы this, логика размазана по методам, переиспользование только через HOC. Сегодня — легаси плюс единственный живой кейс: Error Boundary.

Другие вопросы раздела