Классовые компоненты:
class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}
Функциональные компоненты:
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
// Или с arrow function:
const Welcome = (props) => <h1>Hello, {props.name}</h1>;
Классовые:
this.state и this.setState()class Counter extends React.Component {
constructor(props) {
super(props);
this.state = { count: 0 };
}
increment = () => {
this.setState({ count: this.state.count + 1 });
}
}
Функциональные:
useStatefunction Counter() {
const [count, setCount] = useState(0);
const increment = () => {
setCount(count + 1);
}
}
Классовые:
componentDidMount(), componentDidUpdate(), componentWillUnmount() и др.class Example extends React.Component {
componentDidMount() {
console.log('Компонент смонтирован');
}
}
Функциональные:
useEffect для всех сценариев жизненного циклаfunction Example() {
useEffect(() => {
console.log('Компонент смонтирован');
return () => console.log('Компонент будет размонтирован');
}, []);
}
Классовые:
this) или использования стрелочных функцийclass MyComponent extends React.Component {
handleClick() {
// Проблемы с this без bind или стрелочной функции
}
}
Функциональные:
this, так как не используют егоfunction MyComponent() {
const handleClick = () => {
// Нет проблем с контекстом
};
}
| Характеристика | Классовые компоненты | Функциональные компоненты |
|---|---|---|
| Синтаксис | Классы ES6 | Функции |
| Состояние | this.state | useState hook |
| Жизненный цикл | Методы жизненного цикла | useEffect hook |
| Контекст (this) | Требует управления | Не требуется |
| Рекомендации | Legacy (устаревший подход) | Современный стандарт |
Вывод: В новых проектах следует использовать функциональные компоненты с хуками, так как они проще, современнее и покрывают все возможности классовых компонентов. Классовые компоненты важно знать для поддержки legacy-кода.