useState — это хук, предоставляемый React, который
позволяет функциональным компонентам хранить и управлять локальным
состоянием. До появления хуков для работы с состоянием приходилось
использовать классовые компоненты и this.state, что
усложняло код и снижало его читаемость. useState делает
функциональные компоненты полноценной альтернативой классам.
Синтаксис и базовое использование:
import { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>Счётчик: {count}</p>
<button onCl ick={() => setCount(count + 1)}>Увеличить</button>
</div>
);
}
count — текущее состояние.setCount — функция для обновления состояния.useState(0) — инициализация состояния значением
0.Ключевые особенности useState:
useState для хранения
различных данных.const [name, setName] = useState('Иван');
const [age, setAge] = useState(25);
const [expensiveValue, setExpensiveValue] = useState(() => computeExpensiveValue());
setCount(prevCount => prevCount + 1);
const [user, setUser] = useState({ name: 'Иван', age: 25 });
setUser(prev => ({ ...prev, age: prev.age + 1 }));
useEffect — хук, позволяющий выполнять побочные эффекты
в функциональных компонентах. Побочные эффекты включают: запросы к
серверу, подписки на события, изменение DOM, таймеры и очистку
ресурсов.
Синтаксис и базовое использование:
import { useEffect, useState } from 'react';
function Timer() {
const [seconds, setSeconds] = useState(0);
useEffect(() => {
const interval = setInterval(() => {
setSeconds(prev => prev + 1);
}, 1000);
return () => clearInterval(interval);
}, []);
return <p>Прошло секунд: {seconds}</p>;
}
dependency array), определяющий, когда эффект будет
вызываться.componentWillUnmount в
классах).Основные сценарии использования
useEffect:
useEffect(() => {
console.log('Выполняется после каждого рендера');
});
useEffect(() => {
console.log('Выполняется один раз при монтировании');
}, []);
useEffect(() => {
console.log(`Состояние count изменилось: ${count}`);
}, [count]);
useEffect(() => {
const handler = () => console.log('Событие');
window.addEventListener('resize', handler);
return () => window.removeEventListener('resize', handler);
}, []);
Комбинация этих хуков позволяет синхронизировать состояние и побочные эффекты:
function FetchData() {
const [data, setData] = useState(null);
useEffect(() => {
async function load() {
const response = await fetch('https://api.example.com/data');
const result = await response.json();
setData(result);
}
load();
}, []);
return <div>{data ? data.name : 'Загрузка...'}</div>;
}
data обновляется через
setData.useState.useEffect.useState и useEffect — фундаментальные
инструменты для функциональных компонентов. Первый обеспечивает
управление состоянием, второй — контроль побочных эффектов и
синхронизацию с внешними источниками данных. Правильное сочетание этих
хуков позволяет создавать эффективные, чистые и легко поддерживаемые
компоненты React.