Redux — це потужна бібліотека для керування станом у React-додатках. Її головна перевага полягає в тому, що вона надає централізоване сховище для стану вашого додатка, що дозволяє легко підтримувати та масштабувати ваш код.
Основні концепції Redux
1. Store
Централізоване сховище, яке зберігає весь стан додатка. У Redux має бути лише один Store.
2. Actions
Це об’єкти, які описують те, що має статися. У них є обов’язкове поле type, що вказує на тип дії, і, можливо, додаткові дані (payload).
|
1 |
const incrementAction = { type: 'INCREMENT' }; |
3. Reducers
Це функції, які визначають, як змінюється стан додатка у відповідь на дії (actions). Вони приймають поточний стан і дію як аргументи та повертають новий стан.
|
1 2 3 4 5 6 7 8 9 10 |
const counterReducer = (state = 0, action) => { switch (action.type) { case 'INCREMENT': return state + 1; case 'DECREMENT': return state - 1; default: return state; } }; |
4. Dispatch
Це спосіб “викликати” дії. Ви викликаєте store.dispatch(action), щоб повідомити Redux, що щось змінилося.
|
1 |
store.dispatch({ type: 'INCREMENT' }); |
5. Selectors
Це функції для вибору певної частини стану зі Store. Вони роблять код більш читабельним.
Як працює Redux
- Користувач ініціює подію (наприклад, клікає на кнопку).
dispatchвідправляє action до Store.- Reducer обробляє action і повертає новий стан.
- Стан у Store оновлюється.
- React-компоненти, підключені до Store, отримують новий стан і перерендерюються.
Переваги Redux
- Прогнозованість: Один джерело істини (Store) дозволяє легко відстежувати стан.
- Інструменти розробника: Redux DevTools значно спрощує налагодження додатка.
- Масштабованість: Redux підходить для великих додатків, де важливо мати чітку організацію стану.
Приклад: Redux у React
1. Встановлення Redux:
Context API — це вбудований механізм у React для передачі даних (стану або функцій) між компонентами без необхідності прокинути (prop drilling) ці дані через всі проміжні компоненти. Це зручний спосіб спрощення передачі “глобальних” даних, наприклад, теми, мови інтерфейсу чи авторизації.
Як працює Context API
- Створення контексту: Використовується функція
React.createContext(), яка створює об’єкт контексту. - Надання даних (Provider): Компонент
<Provider>передає дані всім дочірнім компонентам. - Споживання даних (Consumer): Дочірні компоненти отримують дані з контексту за допомогою
useContext()або компонента-споживача<Consumer>.
Простий приклад:
1. Створення контексту:
|
1 2 3 |
import React, { createContext } from 'react'; export const ThemeContext = createContext('light'); // 'light' — значення за замовчуванням |
2. Надання даних через Provider:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
import React from 'react'; import { ThemeContext } from './ThemeContext'; const App = () => { return ( <ThemeContext.Provider value="dark"> {/* Передаємо тему */} <ChildComponent /> </ThemeContext.Provider> ); }; export default App; |
3. Споживання даних:
|
1 2 3 4 5 6 7 8 9 |
import React, { useContext } from 'react'; import { ThemeContext } from './ThemeContext'; const ChildComponent = () => { const theme = useContext(ThemeContext); // Отримуємо тему return <div>Current theme: {theme}</div>; }; export default ChildComponent; |
Переваги Context API:
- Зменшує необхідність пробкинути дані через пропси.
- Легкість у використанні для невеликих глобальних станів (тема, мова).
- Вбудована у React, не потребує додаткових бібліотек.
Обмеження Context API:
- Менш ефективний для частих оновлень стану, оскільки кожен дочірній компонент передплатник перерендерюється.
- Налаштування логіки може стати громіздким у великих проєктах.
Для невеликих додатків або локального глобального стану Context API — чудовий вибір, але для складних застосунків із багатьма потоками даних краще розглянути Redux.