Skip to content

Пакет @nrgyjs/core

Назначение пакета

Пакет @nrgyjs/core содержит базовые реактивные примитивы, механизмы управления жизненным циклом и MVC/MVVM-абстракции, на которых строится экосистема Nrgy.js.

Общая информация

Пакет объединяет несколько уровней функциональности:

  1. Реактивный runtime на основе atom(), compute() и effect().
  2. Scope для владения ресурсами и централизованного уничтожения.
  3. Утилиты для композиции атомов и тестирования реактивных сценариев.
  4. API контроллеров, представлений и view-model для архитектур MVC/MVVM.

Большинство остальных пакетов Nrgy.js используют именно эти базовые контракты.

Установка пакета

bash
npm install @nrgyjs/core
bash
yarn add @nrgyjs/core
bash
pnpm add @nrgyjs/core

Концептуальная архитектура

@nrgyjs/core разделен на несколько функциональных зон:

  1. common/*: общие типы и стратегии сравнения значений.
  2. reactivity/*: атомы, вычисления, эффекты и планировщики выполнения.
  3. scope/*: границы жизненного цикла и сбор ресурсов.
  4. utils/*: утилиты поверх атомов и эффектов.
  5. 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();