useState
— это хук (hook) состояния, который позволяет добавлять локальное состояние в функциональные компоненты React. Это один из самых часто используемых хуков, заменяющий this.state
и this.setState
в классовых компонентах.
import { useState } from 'react';
const [state, setState] = useState(initialState);
Где:
state
— текущее значение состоянияsetState
— функция для обновления состоянияinitialState
— начальное значение состоянияimport { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>Вы кликнули {count} раз(а)</p>
<button onClick={() => setCount(count + 1)}>
Кликнуть
</button>
</div>
);
}
Ленивая инициализация (Lazy Initialization) Для сложных вычислений начального состояния можно передать функцию:
const [state, setState] = useState(() => {
const initialState = someExpensiveComputation(props);
return initialState;
});
Функциональное обновление (Functional Updates) Когда новое состояние зависит от предыдущего:
setCount(prevCount => prevCount + 1);
Объекты в состоянии (Objects in State)
const [user, setUser] = useState({ name: '', age: 0 });
// Правильное обновление объекта
setUser(prevUser => ({ ...prevUser, age: 25 }));
function InputForm() {
const [inputValue, setInputValue] = useState('');
const handleChange = (e) => {
setInputValue(e.target.value);
};
return (
<input
type="text"
value={inputValue}
onChange={handleChange}
/>
);
}
function ToggleButton() {
const [isOn, setIsOn] = useState(false);
return (
<button onClick={() => setIsOn(!isOn)}>
{isOn ? 'Включено' : 'Выключено'}
</button>
);
}
useState
в одном компоненте
const [name, setName] = useState('');
const [age, setAge] = useState(0);
const [isAdmin, setIsAdmin] = useState(false);
// Плохо:
user.name = 'New Name';
setUser(user);
// Хорошо:
setUser({ ...user, name: 'New Name' });
Классовый компонент | Функциональный компонент с useState |
---|---|
this.state = { count: 0 }; |
const [count, setCount] = useState(0); |
useState
— это фундаментальный хук React, который обеспечивает простой и эффективный способ управления состоянием в функциональных компонентах. Он предлагает более чистый и понятный синтаксис по сравнению с состоянием в классовых компонентах, устраняя необходимость работы с this
и упрощая логику компонентов. Правильное использование `useState` включает понимание его асинхронной природы, особенностей обновления объектов и массивов, а также преимуществ функциональных обновлений.