Пакет @nrgyjs/core
Назначение пакета
Пакет @nrgyjs/core содержит базовые реактивные примитивы, механизмы управления жизненным циклом и MVC/MVVM-абстракции, на которых строится экосистема Nrgy.js.
Общая информация
Пакет объединяет несколько уровней функциональности:
- Реактивный runtime на основе
atom(),compute()иeffect(). Scopeдля владения ресурсами и централизованного уничтожения.- Утилиты для композиции атомов и тестирования реактивных сценариев.
- API контроллеров, представлений и view-model для архитектур MVC/MVVM.
Большинство остальных пакетов Nrgy.js используют именно эти базовые контракты.
Установка пакета
bash
npm install @nrgyjs/corebash
yarn add @nrgyjs/corebash
pnpm add @nrgyjs/coreКонцептуальная архитектура
@nrgyjs/core разделен на несколько функциональных зон:
common/*: общие типы и стратегии сравнения значений.reactivity/*: атомы, вычисления, эффекты и планировщики выполнения.scope/*: границы жизненного цикла и сбор ресурсов.utils/*: утилиты поверх атомов и эффектов.mvc/*: декларации контроллеров, связки с view и инструменты для view-model.
Документация по функционалу
- defaultEquals: стратегия сравнения по умолчанию.
- objectEquals: структурное сравнение плоских объектов.
- common/types: общие типы, включая
ValueEqualityFn. - reactivity: основной API атомов, вычислений и эффектов.
- reactivity/types: публичные типы для атомов и эффектов.
- createScope: управление жизненным циклом ресурсов.
- ScopeDestructionError: ошибка агрегированного разрушения.
- scope/types: общие контракты
Scope. - createAtomSubject: атом с каналами значений и ошибок.
- batch: пакетное выполнение обновлений.
- mapAtom: преобразование атома в вычисляемый атом.
- mergeAtoms: объединение нескольких атомов.
- readonlyAtom: read-only представление атома.
- runEffects: принудительный запуск очереди эффектов.
- controller: декларации контроллеров и extensions.
- view: контракты для связки контроллера и представления.
- viewModel: декларации view-model.
- viewProxy: реализация
ViewBindingдля тестов и адаптеров. - withView: extension для передачи view в контроллер.
Примеры использования
ts
import { atom, compute, effect } from '@nrgyjs/core';
const count = atom(1);
const doubled = compute(() => count() * 2);
const subscription = effect(doubled, (value) => {
console.log(value);
});
count.set(2);
subscription.destroy();ts
import { declareController } from '@nrgyjs/core';
const CounterController = declareController(({ scope }) => {
const value = scope.atom(0);
return {
value,
increase: () => value.update((prev) => prev + 1),
};
});
const controller = new CounterController();
controller.increase();
controller.destroy();