React — это библиотека JavaScript для создания пользовательских интерфейсов, и ее основой являются компоненты. В React существует концепция "жизненного цикла компонентов", которая описывает различные этапы, через которые проходит компонент с момента создания до удаления. Для функциональных компонентов в React введены новые возможности с появлением хуков в React 16.8
.
Основные этапы жизненного цикла
Создание (Mounting):
useEffect(() => {}, [])
- вызывается после первого рендера компонента. Подходит для инициализации данных и выполнения запросов к API.
import React, { useEffect } from 'react';
const MyComponent = () => {
useEffect(() => {
console.log('Компонент создан');
// Инициализация данных
// Запросы к API
return () => console.log('Компонент удален'); // Очистка эффекта при размонтировании
}, []);
return <div>Привет, React!</div>;
};
export default MyComponent;
Обновление (Updating):
useEffect(() => {})
- вызывается при каждом рендере компонента. Подходит для обработки обновлений состояния.
import React, { useState, useEffect } from 'react';
const UpdateExample = () => {
const [count, setCount] = useState(0);
useEffect(() => {
console.log('Компонент обновлен');
// Логика обновления
});
return (
<div>
<p>Счетчик: {count}</p>
<button onClick={() => setCount(count + 1)}>Увеличить</button>
</div>
);
};
export default UpdateExample;
Размонтирование (Unmounting):
useEffect(() => () => {})
- вызывается при размонтировании компонента. Подходит для очистки ресурсов.
import React, { useEffect } from 'react';
const CleanupExample = () => {
useEffect(() => {
console.log('Компонент создан');
return () => console.log('Компонент удален');
}, []);
return <div>Привет, React!</div>;
};
export default CleanupExample;
Пример использования всех этапов жизненного цикла
import React, { useState, useEffect } from 'react';
const LifecycleExample = () => {
const [data, setData] = useState([]);
useEffect(() => {
console.log('Компонент создан');
// Инициализация данных (Mounting)
fetchData();
return () => console.log('Компонент удален'); // Очистка эффекта при размонтировании
}, []);
useEffect(() => {
console.log('Компонент обновлен');
// Логика обновления (Updating)
}, [data]);
const fetchData = async () => {
// Запросы к API
const response = await fetch('https://api.example.com/data');
const result = await response.json();
setData(result);
};
return (
<div>
<p>Данные: {JSON.stringify(data)}</p>
<button onClick={() => setData([])}>Очистить данные</button>
</div>
);
};
export default LifecycleExample;
В этом примере мы видим применение всех основных этапов жизненного цикла компонентов в функциональных компонентах React. Хуки, такие как useEffect
, позволяют нам легко управлять этими этапами и выполнять необходимые действия на каждом из них. Помимо рассмотренных примеров, существуют и другие хуки, такие как useMemo
и useCallback
, которые также могут быть полезны в различных сценариях разработки.