Группы и доступ к кэшу
Инвалидация группы запросов
Фабрика регистрирует каждый созданный запрос, поэтому их можно перезапросить вместе — эффектор-овский аналог queryClient.invalidateQueries:
import { createQueryFactory } from 'effector-refetch';
const { createQuery, invalidate } = createQueryFactory();
const todos = createQuery({ effect: fetchTodosFx });
const profile = createQuery({ effect: fetchProfileFx });
// перезапросить все запросы, которые уже запускались
invalidate();
// или сузить предикатом (получает объект запроса)
invalidate({ predicate: (q) => q === todos });invalidate — обычное событие: scope-корректно (allSettled(invalidate, { scope }) для SSR/тестов) и композируемо: sample({ clock: loggedOut, target: invalidate }). Перезапрашиваются только запросы, которые уже выполнялись, с их последними параметрами.
Нужны отдельные группы — используйте несколько фабрик.
Императивные чтение и запись кэша
import { getQueryData, setQueryData } from 'effector-refetch';
const todos = getQueryData(todosQuery); // текущее $data
setQueryData(todosQuery, (prev) => [...(prev ?? []), newTodo]); // значение или (prev) => nextОни читают/пишут no-scope-стор — для одно-клиентского приложения. В scope-коде читайте scope.getState(query.$data) и предпочитайте операторы update / optimisticUpdate (они scope-корректны).
gcTime?
TanStack-овский gcTime выгружает записи кэша, когда у них не осталось наблюдателей. effector-refetch не отслеживает наблюдателей (запросы — обычные юниты, не подписки), поэтому ближайший аналог — выгрузка по возрасту в адаптере: inMemoryCache({ maxAge }) / localStorageCache({ maxAge }), плюс maxEntries для LRU-лимита.