Skip to main content

Що таке Redux?

Що таке Redux

Redux - це глобальне сховище стану (state manager) для JavaScript-застосунків. Він допомагає централізовано керувати станом (даними), щоб різні частини застосунку могли синхронно реагувати на зміни.

Коротко: Redux - це "єдине джерело правди" (single source of truth) для всього стану застосунку.


Основна ідея Redux

React керує локальним станом компонентів (useState, useReducer). Але коли застосунок стає великим, дані потрібно ділити між різними компонентами.

Приклад проблеми:

javascript
// App.jsx function App() { const [user, setUser] = useState(null); return ( <> <Navbar user={user} /> <Dashboard user={user} /> <Settings user={user} /> </> ); }

Усі пропси user доводиться прокидати через дерево компонентів - незручно, важко масштабувати, з'являються помилки.


Redux вирішує це

Він створює одне спільне сховище (store), куди кладеться весь стан, і компоненти можуть:

  • читати потрібні дані,
  • оновлювати їх через "дії" (actions).

Ключові концепції Redux

ЕлементЩо робитьАналогія
StoreЗберігає весь стан застосункуЦентральний склад даних
ActionОписує що сталося (звичайний об'єкт { type, payload })Замовлення на зміну
ReducerЧиста функція, яка каже, як міняти стан у відповідь на actionРобітник, що обробляє замовлення
DispatchВідправляє action у reducerКур'єр, що доставляє замовлення
SelectorВитягує потрібні дані зі storeВітрина, де беремо товар

Приклад

1. Reducer - керує змінами

javascript
function counterReducer(state = { count: 0 }, action) { switch (action.type) { case "increment": return { count: state.count + 1 }; case "decrement": return { count: state.count - 1 }; default: return state; } }

2. Store - створюється один раз

javascript
import { createStore } from "redux"; const store = createStore(counterReducer);

3. Компоненти підписуються

javascript
import { Provider, useSelector, useDispatch } from "react-redux"; function Counter() { const count = useSelector(state => state.count); const dispatch = useDispatch(); return ( <> <p>{count}</p> <button onClick={() => dispatch({ type: "decrement" })}>-</button> <button onClick={() => dispatch({ type: "increment" })}>+</button> </> ); } function App() { return ( <Provider store={store}> <Counter /> </Provider> ); }

Як працює Redux (покроково)

  1. Компонент викликає dispatch({ type: "increment" }).
  2. Redux передає цю дію (action) у reducer.
  3. reducer створює нову копію стану.
  4. Store повідомляє всі підписані компоненти.
  5. Компоненти отримують новий стан через useSelector.

Навіщо потрібен Redux у React-застосунках

ЗавданняЧому допомагає Redux
Глобальний станУсі дані централізовані в одному місці
ПередбачуваністьКожна зміна проходить через reducer
Спрощене налагодженняRedux DevTools показують історію дій (time travel)
МасштабованістьМожна додавати нові reducers (cart, user, products, ui)
НезмінністьState не можна мутувати - це робить логіку чистою
ІнтеграціїRedux Toolkit, Thunks, Saga, RTK Query для асинхронних даних

Сучасний Redux = Redux Toolkit (RTK)

Сьогодні ніхто не пише "голий" Redux. Використовують Redux Toolkit (RTK) - офіційну надбудову, яка спрощує все:

Автоматично створює store Спрощує reducers Додає асинхронні "thunks" Оптимізує незмінність

Приклад з RTK:

javascript
import { configureStore, createSlice } from "@reduxjs/toolkit"; const counterSlice = createSlice({ name: "counter", initialState: { count: 0 }, reducers: { increment: state => { state.count++ }, decrement: state => { state.count-- }, }, }); export const { increment, decrement } = counterSlice.actions; export const store = configureStore({ reducer: counterSlice.reducer });

Підсумок

ЩоRedux
Що цеЦентралізований state manager
Для чогоЩоб керувати станом застосунку в одному місці
Як працюєЧерез Store → Action → Reducer → View
Чому популярнийПередбачуваність, прозорість, масштабованість
Сучасна реалізаціяRedux Toolkit (RTK)

Коротко:

Redux потрібен, коли застосунок стає надто великим, і тобі потрібно централізовано керувати станом - не тягати props, не плодити контексти, а мати одну систему, де все під контролем.

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

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

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