Классовые компоненты:
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 });
}
}
Функциональные:
useState
function 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-кода.