НАЙКРАЩИЙ САЙТ ДЛЯ ВЕБ-РОЗРОБНИКІВ
React. W3Schools українською. Уроки для початківців

En

React хук useState


Хук React useState дозволяє нам відстежувати стан у компоненті функції.

Стан зазвичай належить до даних або властивостей, які потрібно відстежувати в програмі.


Імпорт useState

Щоб використовувати хук useState, нам спочатку потрібно import (імпортувати) його в наш компонент.

Приклад:

У верхній частині компонента import хук useState.

import { useState } from "react";

Зверніть увагу, що ми деструктуруємо useState з react, оскільки це іменований експорт.

Щоб дізнатися більше про деструктуризацію, перегляньте розділ ES6.


Ініціалізувати useState

Ми ініціалізуємо наш стан, викликаючи useState у нашому компоненті функції.

useState приймає початковий стан і повертає два значення:

  • Поточний стан
  • Функція, яка оновлює стан

Приклад:

Ініціалізувати стан у верхній частині компонента функції.

import { useState } from "react";

function FavoriteColor() {
const [color, setColor] = useState("");
}

Зверніть увагу, що знову ми деструктуруємо значення, які повертає useState.

Перше значення, color, це наш поточний стан.

Друге значення, setColor, це функція, яка використовується для оновлення нашого стану.

Ці імена є змінними, які можна назвати як завгодно.

Нарешті, ми встановлюємо початковий стан у порожній рядок: useState("")


Стан читання

Тепер ми можемо включити наш стан будь-де в наш компонент.

Приклад:

Використовуйте змінну стану у відтвореному компоненті.

import { useState } from "react";
import ReactDOM from "react-dom/client";

function FavoriteColor() {
const [color, setColor] = useState("red");

return <h1>My favorite color is {color}!</h1>
}

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<FavoriteColor />);

Виконати приклад »


Оновити стан

Щоб оновити наш стан, ми використовуємо нашу функцію оновлення стану.

Ми ніколи не повинні безпосередньо оновлювати стан. Наприклад: color = "red" заборонено.

Приклад:

Використовуйте кнопку для оновлення стану:

import { useState } from "react";
import ReactDOM from "react-dom/client";

function FavoriteColor() {
const [color, setColor] = useState("red");

return (
<>
  <h1>My favorite color is {color}!</h1>
  <button
    type="button"
    onClick={() => setColor("blue")}
  >Blue</button>
</>
)
}

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<FavoriteColor />);

Виконати приклад »


Що може мати стан?

Хук useState можна використовувати для відстеження рядків, чисел, логічних значень, масивів, об’єктів і будь-якої їх комбінації!

Ми могли б створити кілька хуків стану для відстеження окремих значень.

Приклад:

Створіть хуки з кількома станами:

import { useState } from "react";
import ReactDOM from "react-dom/client";

function Car() {
const [brand, setBrand] = useState("Ford");
const [model, setModel] = useState("Mustang");
const [year, setYear] = useState("1964");
const [color, setColor] = useState("red");

return (
<>
  <h1>My {brand}</h1>
  <p>
    It is a {color} {model} from {year}.
  </p>
</>
)
}

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<Car />);

Виконати приклад »

Або ми можемо просто використати один стан і замість нього включити об’єкт!

Приклад:

Створіть один хук, який утримує об’єкт:

import { useState } from "react";
import ReactDOM from "react-dom/client";

function Car() {
const [car, setCar] = useState({
brand: "Ford",
model: "Mustang",
year: "1964",
color: "red"
});

return (
<>
  <h1>My {car.brand}</h1>
  <p>
    It is a {car.color} {car.model} from {car.year}.
  </p>
</>
)
}

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<Car />);

Виконати приклад »

Оскільки ми зараз відстежуємо один об’єкт, нам потрібно посилатися на цей об’єкт, а потім на властивість цього об’єкта під час відтворення компонента. (Наприклад: car.brand)


Оновлення об’єктів і масивів у стані

Під час оновлення стану весь стан перезаписується.

Що робити, якщо ми хочемо лише оновити колір нашого автомобіля?

Якби ми викликали лише setCar({color: "blue"}), це видалило б марку, модель і рік випуску з нашого стану.

Ми можемо використовувати оператор поширення JavaScript, щоб допомогти нам.

Приклад:

Використовуйте оператор поширення JavaScript, щоб оновити лише колір автомобіля:

import { useState } from "react";
import ReactDOM from "react-dom/client";

function Car() {
const [car, setCar] = useState({
brand: "Ford",
model: "Mustang",
year: "1964",
color: "red"
});

const updateColor = () => {
setCar(previousState => {
  return { ...previousState, color: "blue" }
});
}

return (
<>
  <h1>My {car.brand}</h1>
  <p>
    It is a {car.color} {car.model} from {car.year}.
  </p>
  <button
    type="button"
    onClick={updateColor}
  >Blue</button>
</>
)
}

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<Car />);

Виконати приклад »

Оскільки нам потрібне поточне значення стану, ми передаємо функцію в нашу функцію setCar. Ця функція отримує попереднє значення.

Потім ми повертаємо об’єкт, розповсюджуючи previousState і перезаписуючи лише колір.


Перевірте себе за допомогою вправ

Вправа:

Заповніть цю інструкцію, щоб відстежувати змінну "count" за допомогою хука useState.

import { useState } from "react";

function KeepCount() {
const [, ] = useState(0);
}