Принцип unopinionated
Коли кажуть, що Zustand - "unopinionated", це означає, що бібліотека не нав'язує тобі суворий спосіб організації коду, структури стора чи архітектури застосунку. Вона дає лише інструменти, а не правила, як їх використовувати.
Просте визначення
Unopinionated (неупереджений) - означає, що бібліотека не диктує, як саме ти маєш писати код, а лише надає мінімальний API для керування станом.
Приклад на практиці
У Redux
Redux - opinionated:
- вимагає
actions,reducers,dispatch,store,provider; - нав'язує певний потік даних (unidirectional data flow);
- диктує архітектуру застосунку (модулі, типи екшенів тощо).
Приклад типового Redux boilerplate:
dispatch({ type: 'INCREMENT' })У Zustand
Zustand - unopinionated: ти сам вирішуєш, як зберігати, змінювати і структурувати стан.
const useStore = create((set) => ({
count: 0,
increase: () => set((s) => ({ count: s.count + 1 })),
}))Хочеш - роби кілька сторів. Хочеш - клади все в один. Хочеш - розділяй за модулями чи за фічами. Zustand не втручається.
Що мається на увазі під "unopinionated" у контексті Zustand
| Область | Що означає "unopinionated" |
|---|---|
| Архітектура | Немає обов'язкових патернів (MVC, Flux, slices тощо) |
| API | Мінімум методів (set, get, subscribe) - і все |
| Організація store | Можна зберігати все в одному store або в кількох |
| Типізація | Можна використовувати TypeScript, але можна й без нього |
| React-інтеграція | Store можна використовувати і поза React |
| Middleware | Підключаються за бажанням (persist, devtools, immer тощо) |
Переваги unopinionated-підходу
- Гнучкість - ти сам визначаєш архітектуру.
- Простота - можна почати з 5 рядків коду.
- Сумісність - легко інтегрується з будь-якими підходами (Flux, MVVM, Feature-Sliced Design тощо).
- Легкий рефакторинг - не потрібно переписувати архітектуру при змінах.
Можливий мінус
«Unopinionated» = «Без правил» Якщо проєкт великий, а в команди немає спільних домовленостей, структура Zustand-сторів може стати хаотичною.
Тому на реальних проєктах часто вводять свої внутрішні "opinionated" правила:
- один store на фічу,
- усі actions називати за шаблоном,
- зберігати стан і типи в окремих файлах тощо.
Підсумок
| Параметр | Redux | Zustand |
|---|---|---|
| Opinionated | Так - сувора архітектура | Ні - гнучкість і свобода |
| Boilerplate | Багато | Мінімум |
| Потік даних | Жорстко заданий | На твій вибір |
| Підтримка поза React | Складно | Із коробки |
| Використання | "За правилами" | "Як хочеш" |
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.