Ответ
Классовые компоненты используют ES6-классы и методы жизненного цикла (componentDidMount, componentDidUpdate и т.д.), а функциональные с хуками (useState, useEffect) работают через функции и хуки.
Основные отличия:
- Синтаксис – классы vs функции.
- Состояние – в классах через
this.state, в хуках черезuseState. - Жизненный цикл – хуки заменяют методы (
useEffectвместоcomponentDidMountи др.). - Переиспользование логики – хуки позволяют выносить логику в кастомные хуки, в классах – HOC или рендер-пропсы.
Пример:
// Классовый компонент
class Counter extends React.Component {
state = { count: 0 };
increment = () => this.setState({ count: this.state.count + 1 });
render() { return <button onClick={this.increment}>{this.state.count}</button>; }
}
// Функциональный с хуками
function Counter() {
const [count, setCount] = useState(0);
const increment = () => setCount(count + 1);
return <button onClick={increment}>{count}</button>;
}
Хуки проще, компактнее и позволяют избежать "адского колбэка" (this).