Scope API
import { type Scope, fork } from "effector";
const scope = fork();
Scope
— это полностью изолированный экземпляр приложения.
Основное назначение скоупа связано с SSR (Server-Side Rendering), но не ограничивается только этим случаем использования.
Скоуп содержит независимую копию всех юнитов (включая связи между ними), а также базовые методы для работы с ними.
Если вы хотите глубже разобраться в скоупах, ознакомьтесь с отличной статьёй про изолированыне контексты.
У нас также есть несколько гайдов связанных со скоупом:
Особенности скоупов
- Существует несколько правил, которые нужно соблюдать, чтобы успешно работать со скоупом.
- Скоуп можно потерять — чтобы этого избежать, используйте
scopeBind
.
Методы скоупа
.getState($store)
Возвращает значение стора в данном скоупе:
- Формула
const scope: Scope;const $value: Store<T> | StoreWritable<T>;
const value: T = scope.getState($value);
- Тип
scope.getState<T>(store: Store<T>): T;
- Возвращает
Значение стора.
- Пример
Создадим два экземпляра приложения, вызовем события в каждом из них и проверим значение стора $counter
в обоих случаях:
import { createStore, createEvent, fork, allSettled } from "effector";
const inc = createEvent();const dec = createEvent();const $counter = createStore(0);
$counter.on(inc, (value) => value + 1);$counter.on(dec, (value) => value - 1);
const scopeA = fork();const scopeB = fork();
await allSettled(inc, { scope: scopeA });await allSettled(dec, { scope: scopeB });
console.log($counter.getState()); // => 0console.log(scopeA.getState($counter)); // => 1console.log(scopeB.getState($counter)); // => -1
Связанные API и статьи
-
API
scopeBind
– Метод для привязки юнита к скоупуfork
– Оператор для создания скоупаallSettled
– Метод для вызова юнита в указанном скоупе и ожидания завершения всей цепочки эффектовserialize
– Метод для получения сериализованных значений сторовhydrate
– Метод для гидрации сериализованных данных
-
Статьи
Документация на английском языке - самая актуальная, поскольку её пишет и обновляет команда effector. Перевод документации на другие языки осуществляется сообществом по мере наличия сил и желания.
Помните, что переведенные статьи могут быть неактуальными, поэтому для получения наиболее точной и актуальной информации рекомендуем использовать оригинальную англоязычную версию документации.