Skip to main content

Принцип unopinionated

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


Просте визначення

Unopinionated (неупереджений) - означає, що бібліотека не диктує, як саме ти маєш писати код, а лише надає мінімальний API для керування станом.


Приклад на практиці

У Redux

Redux - opinionated:

  • вимагає actions, reducers, dispatch, store, provider;
  • нав'язує певний потік даних (unidirectional data flow);
  • диктує архітектуру застосунку (модулі, типи екшенів тощо).

Приклад типового Redux boilerplate:

javascript
dispatch({ type: 'INCREMENT' })

У Zustand

Zustand - unopinionated: ти сам вирішуєш, як зберігати, змінювати і структурувати стан.

javascript
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 називати за шаблоном,
  • зберігати стан і типи в окремих файлах тощо.

Підсумок

ПараметрReduxZustand
OpinionatedТак - сувора архітектураНі - гнучкість і свобода
BoilerplateБагатоМінімум
Потік данихЖорстко заданийНа твій вибір
Підтримка поза ReactСкладноІз коробки
Використання"За правилами""Як хочеш"

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

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

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