Skip to main content

Що таке "стан" (state)

Що таке "стан" (State)

Стан (state) - це поточне значення даних, які описують "що відбувається" у програмі в даний момент часу.

Простіше кажучи:

State - це "пам'ять" застосунку про його поточний стан справ.


Приклади стану в житті

Уяви собі:

  • Світло в кімнаті може бути увімкнене або вимкнене -> це його стан
  • Користувач на сайті може бути авторизований або ні -> це стан
  • Кошик в інтернет-магазині містить 3 товари -> це стан

Приклад на JavaScript

javascript
let count = 0; // <- поточний стан лічильника function increment() { count++; // змінюємо стан console.log("Лічильник:", count); } increment(); // Лічильник: 1 increment(); // Лічильник: 2

Тут count - це стан програми. Функція increment змінює його з часом.


Стан у React

У React компонент має власний стан (state) - дані, які визначають, що він відображає.

javascript
import { useState } from "react"; function Counter() { const [count, setCount] = useState(0); // <- стан компонента return ( <div> <p>Лічильник: {count}</p> <button onClick={() => setCount(count + 1)}>+</button> </div> ); }

Тут:

  • count - значення стану,
  • setCount - функція, яка оновлює цей стан,
  • зміна стану -> оновлює інтерфейс.

Чому стан важливий

Тому що вся поведінка програми залежить від нього.

Наприклад:

СтанПоведінка
Користувач не авторизованийПоказуємо форму входу
Користувач увійшовПоказуємо особистий кабінет
Товар додано в кошикЗмінюємо іконку кошика
Модальне вікно відкритеБлокуємо фон і показуємо вікно

Типи стану

ТипПрикладДе зберігається
Локальний (UI state)Чи відкритий dropdown, обрана вкладкаУ компоненті
Глобальний (application state)Авторизація, налаштування, кошикУ Redux / Context / Zustand
Серверний (server state)Дані з API (/users)На сервері / кешується клієнтом
Постійний (persistent state)localStorage, IndexedDBУ браузері / БД
Обчислюваний (derived state)totalPrice = sum(items)Обчислюється на основі інших даних

Приклад: стан форми

javascript
const formState = { name: "", email: "", subscribed: false, }; // користувач вводить дані formState.name = "Tim"; formState.subscribed = true; console.log(formState); // { name: "Tim", email: "", subscribed: true }

Тут стан зберігає, що ввів користувач у кожен момент часу.


Стан як "моментальний знімок" (snapshot)

Якщо ти відкриєш гру чи застосунок - усе, що бачиш на екрані, це візуалізація поточного стану.

Приклад у термінах часу:

javascript
[ State 1 ] -> [ State 2 ] -> [ State 3 ] ^ click ^ API response ^ logout

Кожна дія (event) змінює стан -> стан визначає, що показати.


Приклад в архітектурі (state machine)

javascript
const trafficLight = { state: 'green', next() { if (this.state === 'green') this.state = 'yellow'; else if (this.state === 'yellow') this.state = 'red'; else this.state = 'green'; } }; trafficLight.next(); console.log(trafficLight.state); // yellow

Це класичний автомат станів (state machine):

  • є скінченна кількість станів;
  • переходи між ними строго визначені.

Зміна стану = зміна поведінки

СтанІнтерфейс
loading = trueПоказуємо спінер
loading = falseПоказуємо дані
error = trueПоказуємо повідомлення про помилку

Підсумок

Що таке stateПоточний "знімок" даних програми
Де використовуєтьсяУ всіх програмах - від лічильників до SPA
Чому важливоВід нього залежить логіка та інтерфейс
Як змінюєтьсяЧерез події, дії користувача, відповіді API
У ReactЗміна state -> оновлення DOM
В архітектуріВизначає, як система реагує на події

Головна ідея:

Стан - це "душа" застосунку. Він описує що є зараз, і саме від нього залежить, що побачить користувач і як програма себе поведе.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.