FAQ
Чем Nrgy.js отличается от обычного state manager?
Nrgy.js не сводится только к хранению и обновлению state. Он сочетает fine-grained реактивность с явным lifecycle ownership, controllers и view models.
Главное отличие в том, что библиотека проектируется так, чтобы держать раздельно бизнес-логику, состояние, cleanup и UI contracts, а не относиться к state management как к изолированной задаче.
Почему effect() вызывается не сразу?
По умолчанию effect() работает отложенно. Это позволяет сначала завершить несколько синхронных state updates, а уже потом дать эффекту увидеть финальное согласованное состояние вместо промежуточных значений.
Если нужно синхронное наблюдение, для этого есть syncEffect(), но его стоит использовать только там, где порядок выполнения действительно важен.
Когда использовать batch()?
batch() нужен, когда несколько write-операций образуют один логический переход и наблюдатели должны увидеть только финальное согласованное состояние.
Типичные случаи:
- одновременное обновление нескольких полей формы
- применение server data сразу к нескольким atoms
- защита observers от реакции на промежуточные состояния
Зачем нужен scope?
Scope является ownership boundary для реактивных ресурсов.
Он нужен, чтобы собирать:
- effects и subscriptions
- child scopes
- atoms, созданные для фичи
- пользовательские cleanup callbacks
Когда владелец уничтожается, scope позволяет освободить всё это в одном месте.
Когда вызывать destroy()?
destroy() нужно вызывать тогда, когда feature, владеющая ресурсом, завершается.
Типичные случаи:
- экран размонтируется
- завершается временный flow
- long-lived controller или view model больше не нужны
Если controller, scope или atom могут пережить свой полезный срок и при этом оставаться достижимыми, у них должна быть явная точка destruction.
Чем MVVM отличается от MVC здесь?
В этой документации полезно понимать различие практично:
- MVC оставляет больше явной координации и binding-логики в controller
- MVVM сильнее акцентирует чистый view-facing contract через view model
Оба подхода отделяют бизнес-логику от rendering, но для UI-facing contracts в Nrgy.js MVVM является более полезной ментальной моделью.
Как передавать зависимости?
Feature inputs нужно передавать через params. Инфраструктурные зависимости - через extensions или DI.
Примеры params:
- initial values
- screen identifiers
- feature configuration
Примеры DI:
- API clients
- loggers
- gateways
- analytics services
Можно ли использовать Nrgy.js без React?
Да. Core primitives, controllers, view models, scopes и DI integrations не зависят от React.
React - это только один из UI integration layers. Ту же бизнес-логику можно использовать в headless flows, SDK-like интеграциях, тестах или других UI окружениях.