API @virentia/effector
@virentia/effector связывает юниты Virentia с юнитами настоящего пакета effector.
associate
import { associate } from "@virentia/effector";
const association = associate({
virentia: virentiaScope,
effector: effectorScope,
});Создает глобальную association для одного scope Virentia и одного scope Effector. Пакет хранит association в weak map, сразу по обоим scope.
Возвращаемый EffectorAssociation содержит ту же пару scope:
association.virentia;
association.effector;Метода dispose() нет. Association достижима, пока достижимы ее scope.
ensureAssociation
import { ensureAssociation } from "@virentia/effector";
const association = ensureAssociation({ effector: effectorScope });Ищет существующую association по scope Effector, scope Virentia или по обоим сразу. Если связи нет, бросает ошибку.
effectorAssociations
import { effectorAssociations } from "@virentia/effector";
effectorAssociations.byVirentia.get(virentiaScope);
effectorAssociations.byEffector.get(effectorScope);Глобальный weak-map registry. В коде приложения обычно достаточно associate и ensureAssociation; прямой доступ полезен для диагностики и интеграционных тестов.
fool
import { fool } from "@virentia/effector";
const universalUnit = fool(unit);Возвращает проходной универсальный юнит. Используйте возвращенное значение на границах фич:
sample({
clock: universalUnit,
target: effectorTarget,
});
reaction({
on: universalUnit,
run(payload) {},
});Результат можно использовать как Effector-юнит в clock, source или target, и как Virentia-юнит в reaction, on, run и scoped.
Прямые вызовы
fool(original) не мутирует original. Сохраняйте и передавайте возвращенный юнит. Вызов original остается вызовом исходного runtime-юнита, а не fooled-обертки. Мост может увидеть этот исходный вызов и передать его через связанные scope, но гибридный API есть только у значения, которое вернул fool.
Если fooled-юниту нужен второй runtime, но association не находится по текущему scope Virentia или scope Effector из stack.scope, пакет бросает ошибку.