На реальных эффектах
Единица работы — ваш собственный Effect. Он виден в devtools, композируется через attach, дружит с fork. Query — тонкая реактивная обёртка, а не чёрный ящик.
Запросы, мутации, кэш и пагинация для effector — поверх ваших реальных эффектов, а не «чёрного ящика». Дружелюбные дефолты, честные компромиссы, готовность к SSR через fork.
pnpm add effector-refetch effectornpm install effector-refetch effectoryarn add effector-refetch effectorБиндинги фреймворков — опциональные peer-зависимости; ставьте нужные: effector-react + react, effector-vue + vue или effector-solid + solid-js. Полный разбор — в Быстром старте.
import { createEffect } from 'effector';
import { createQuery, createMutation, invalidate } from 'effector-refetch';
const fetchTodosFx = createEffect(() => fetch('/api/todos').then((r) => r.json()));
const addTodoFx = createEffect((text: string) =>
fetch('/api/todos', { method: 'POST', body: JSON.stringify({ text }) }).then((r) => r.json()),
);
export const todos = createQuery({ effect: fetchTodosFx, cache: true, retry: 2 });
export const addTodo = createMutation({ effect: addTodoFx });
// после добавления задачи список обновится
invalidate({ on: addTodo, refetch: todos });
todos.start();
addTodo.mutate('Купить молоко'); // → todos автоматически перезапроситсяВ компоненте читаем одним хуком:
const { data, pending } = useUnit(todos); // React / Vue / SolidМожно — и вы их по-прежнему используете. effector-refetch не заменяет эффекты, а берёт на себя скучную и хрупкую обвязку: статусы загрузки/ошибки, ретраи, кэш, отмену запросов, дедупликацию, валидацию. Ваш эффект остаётся полноценным юнитом effector, который видно в devtools и который тестируется через fork().
Если вы хоть раз руками разбирались с «грузится ли, упало ли, не устарел ли ответ, не кликнул ли пользователь дважды, какой запрос выиграл гонку» — именно это библиотека берёт на себя, декларативно.
Берите, если у вас реальная асинхронность с гонками, нужен кэш или много эндпоинтов, и хочется тестировать логику без рендера.
Пропустите для крошечного приложения с парой useState или для одноразового прототипа — там честнее обычные эффекты (или даже fetch). Лучше недо-использовать, чем тащить по инерции. См. честное сравнение с farfetched.
Pre-1.0, в активной разработке · MIT · Roadmap