React Hooks (хуки) — это специальные функции, представленные в React 16.8, которые позволяют использовать состояние (state) и другие возможности React без написания классовых компонентов. Это революционное изменение в парадигме разработки на React.
Позволяет добавлять локальное состояние в функциональные компоненты:
import { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0); // Инициализация состояния
return (
<button onClick={() => setCount(count + 1)}>
Нажато {count} раз
</button>
);
}
Объединяет функциональность componentDidMount
, componentDidUpdate
и componentWillUnmount
:
useEffect(() => {
// Код для выполнения после рендера
document.title = `Вы нажали ${count} раз`;
return () => {
// Функция очистки (аналог componentWillUnmount)
};
}, [count]); // Зависимости - эффект выполнится при изменении count
Позволяет использовать контекст без Consumer:
const ThemeContext = React.createContext('light');
function ThemedButton() {
const theme = useContext(ThemeContext);
return <button className={theme}>Кнопка</button>;
}
Альтернатива useState
для сложной логики состояния:
const [state, dispatch] = useReducer(reducer, initialArg, init);
Для оптимизации производительности:
const memoizedCallback = useCallback(() => {
doSomething(a, b);
}, [a, b]);
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
Для доступа к DOM или хранения мутабельных значений:
const inputRef = useRef(null);
<input ref={inputRef} />;
Позволяют создавать собственные хуки для переиспользования логики:
function useWindowWidth() {
const [width, setWidth] = useState(window.innerWidth);
useEffect(() => {
const handleResize = () => setWidth(window.innerWidth);
window.addEventListener('resize', handleResize);
return () => window.removeEventListener('resize', handleResize);
}, []);
return width;
}
// Использование в компоненте
const width = useWindowWidth();
React Hooks — это мощный инструмент, который изменил способ разработки на React, позволив использовать все возможности фреймворка в функциональных компонентах. Они решают проблемы сложности классов, переиспользования логики и организации кода, предлагая более простой и элегантный способ создания React-компонентов. Хуки стали стандартом в современной React-разработке и их понимание критически важно для любого React-разработчика.