Состояние (state) в React представляет собой данные, которые хранятся внутри компонента и могут изменяться в течение жизненного цикла компонента. Состояние позволяет компонентам React обновлять свой пользовательский интерфейс (UI) в зависимости от действий пользователя, данных из сети и других внешних источников.
hook - это функция которая позволяет менять state
внутри функциональных компонент.
Хук useState
— это функция, предоставляемая React, которая позволяет добавлять состояние в функциональные компоненты. Он используется для объявления переменной состояния и функции, которая будет изменять это состояние. Это как обычная переменная, только она не будет обновляться после выхода из функции, ее сохраняет react
.
Давай рассмотрим пример счетчика и управляемого компонента с инпутом:
state
и он сразу обновляет нам UI
то есть наш компонент, то что мы видим и state
синхронизированны по сути.import React, { useState } from 'react';
// Пример компонента счетчика
const Counter = () => {
// useState принимает в себя наше значение с которым мы будем работать и функцию, которая это значение будет менять.
// (Если в консоли посмотреть на внутренности useState, то увидим массив из двух элементов. Первый - значение, а второй - функция)
const [count, setCount] = useState(0); // Так как мы знаем что useState возвращает массив из двух объектов, мы можем использовать деструктуризацию этого массива.
const increment = () => {
setCount(count + 1); // Функция для увеличения count на 1
};
const decrement = () => {
setCount(count - 1); // Функция для уменьшения count на 1
};
return (
<div>
<h2>Счетчик</h2>
<p>{count}</p>
<button onClick={increment}>+</button>
<button onClick={decrement}>-</button>
</div>
);
};
export default function App() {
return (
<div>
<Counter />
</div>
);
}
// Пример управляемого компонента с инпутом
const InputComponent = () => {
const [inputValue, setInputValue] = useState(''); // Используем useState для состояния значения инпута
const handleChange = (event) => {
setInputValue(event.target.value); // Функция для обновления значения инпута
};
return (
<div>
<h2>Управляемый компонент с инпутом</h2>
<input type="text" value={inputValue} onChange={handleChange} />
<p>Значение инпута: {inputValue}</p>
</div>
);
};
export default function App() {
return (
<div>
<InputComponent />
</div>
);
}
Счетчик (Counter
):
useState
для создания переменной состояния count с начальным значением 0.
Функции increment
и decrement
используют setCount
, чтобы изменить состояние count на +1 и -1 соответственно.
Кнопки + и - используют эти функции для увеличения и уменьшения счетчика.Управляемый компонент с инпутом (InputComponent
):
useState
для создания переменной состояния inputValue
с пустой строкой в качестве начального значения.
Функция handleChange
вызывается при изменении значения в инпуте и обновляет inputValue
с помощью setInputValue
.
Значение инпута (inputValue
) отображается как часть UI компонента. Сам способ называется двухсторонним связыванием. Мы связязали значение внутри инпута с состоянием. Подобные компоненты называются управляемыми, потому что мы можем изменить значение компонента изменив состояние.