Skip to content

effector-refetchДанные, которые текут

Запросы, мутации, кэш и пагинация для effector — поверх ваших реальных эффектов, а не «чёрного ящика». Дружелюбные дефолты, честные компромиссы, готовность к SSR через fork.

Установка

bash
pnpm add effector-refetch effector
bash
npm install effector-refetch effector
bash
yarn add effector-refetch effector

Биндинги фреймворков — опциональные peer-зависимости; ставьте нужные: effector-react + react, effector-vue + vue или effector-solid + solid-js. Полный разбор — в Быстром старте.

За 30 секунд

ts
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 автоматически перезапросится

В компоненте читаем одним хуком:

tsx
const { data, pending } = useUnit(todos); // React / Vue / Solid

Почему не «просто эффекты»?

Можно — и вы их по-прежнему используете. effector-refetch не заменяет эффекты, а берёт на себя скучную и хрупкую обвязку: статусы загрузки/ошибки, ретраи, кэш, отмену запросов, дедупликацию, валидацию. Ваш эффект остаётся полноценным юнитом effector, который видно в devtools и который тестируется через fork().

Если вы хоть раз руками разбирались с «грузится ли, упало ли, не устарел ли ответ, не кликнул ли пользователь дважды, какой запрос выиграл гонку» — именно это библиотека берёт на себя, декларативно.

Когда подходит, а когда нет

Берите, если у вас реальная асинхронность с гонками, нужен кэш или много эндпоинтов, и хочется тестировать логику без рендера.

Пропустите для крошечного приложения с парой useState или для одноразового прототипа — там честнее обычные эффекты (или даже fetch). Лучше недо-использовать, чем тащить по инерции. См. честное сравнение с farfetched.

Pre-1.0, в активной разработке · MIT · Roadmap

Под лицензией MIT