Skip to main content
Практика завдань

Незмінність та змінність у JavaScript

У JavaScript дані можуть змінюватися двома способами: змінно та незмінно. Розуміння різниці між ними особливо важливе при роботі зі станом у React, Redux та інших бібліотеках.


Змінність

Змінність означає, що об'єкт може бути змінений після створення.

js
const user = { name: "Alice" }; user.name = "Bob"; // змінюємо безпосередньо console.log(user); // { name: "Bob" }

Такі зміни відбуваються за посиланням і можуть викликати непередбачувану поведінку, особливо якщо той самий об'єкт використовується в кількох місцях.

Незмінність

Незмінність означає, що об'єкт не змінюється, і коли відбуваються зміни, створюється нова копія.

js
const user = { name: "Alice" }; const updatedUser = { ...user, name: "Bob" }; // створюємо новий об'єкт console.log(user); // { name: "Alice" } console.log(updatedUser); // { name: "Bob" }

Незмінність робить дані передбачуваними та безпечними для порівняння, що є критично важливим при повторному рендерингу компонентів у React.

Незмінність у React

React не відстежує зміни за вмістом об'єкта, він порівнює їх за посиланням (===).

Отже, змінне оновлення не викличе повторний рендер:

jsx
// неправильний підхід state.items.push("newItem"); setState(state); // те саме посилання → React не оновить компонент

Правильний незмінний спосіб:

jsx
// створюємо новий масив setState({ ...state, items: [...state.items, "newItem"] });

Порівняння

ВластивістьЗмінністьНезмінність
Зміна данихВідбувається безпосередньо в об'єктіСтворюється нова копія
Поведінка в ReactМоже не викликати повторний рендерЗавжди надійно викликає повторний рендер
Безпека данихМожливі побічні ефектиДані захищені від мутацій
Зручність налагодженняСкладніше відстежуватиЛегше відстежувати зміни

Приклади незмінних операцій:

js
// масиви const newArr = [...oldArr, newItem]; const filtered = oldArr.filter(item => item !== target); // об'єкти const newObj = { ...oldObj, updatedKey: newValue }; // вкладені об'єкти const updated = { ...state, user: { ...state.user, name: "John", }, };

Висновок:

Використовуйте незмінність, щоб зробити код передбачуваним, безпечним і сумісним з React. Це основа правильної роботи useEffect, React.memo, Redux та інших інструментів.

Зміст

ЗмінністьНезмінністьНезмінність у ReactПорівнянняПриклади незмінних операцій:

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

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

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

Дочитали статтю?
Практика завдань