status
Один стор с состоянием эффекта, готовый для компонента: "initial" | "pending" | "done" | "fail".
status(fx);
status(fx, { reset });Из API самого эффекта такой стор не собрать: состояния «ещё не пробовали» у эффекта нет, а «чем закончилась последняя попытка» — это память между событиями жизненного цикла (done и failed — события, не сторы).
Кнопка отправки
Четыре состояния любой формы — без ручной проводки из стора и трёх реакций:
import { status } from "@virentia/core/utils";
const saveStatus = status(saveFx);// во view (пример на React)
const s = useUnit(saveStatus);
return (
<button disabled={s === "pending"}>
{s === "pending" ? "Сохраняем…" : s === "fail" ? "Повторить" : "Сохранить"}
</button>
);«Не показывай ошибку, пока не было попытки»
Состояние "initial" — главная причина существования оператора. По одному fail не отличить «ещё не пробовали» от «попробовали и сбросили», по status — легко:
const showError = computed(() => saveStatus.value === "fail");
const showHint = computed(() => saveStatus.value === "initial"); // нетронутая форма, без красных рамокНовая сущность — чистая история
Когда один эффект обслуживает разные сущности, исход прошлой попытки не должен встретить свежеоткрытую:
const saveStatus = status(saveFx, { reset: recordOpened });Открытие записи возвращает статус в "initial" — ошибка прошлой записи не покажется на новой.
Когда пригодится
- Кнопки отправки, сохранения, загрузки — любой интерфейс, где нужны все четыре состояния.
- Логика «нетронутой формы», где
"initial"— полноценное состояние, а не отсутствие данных. - Экраны успеха:
status === "done"сразу после завершения эффекта.
Когда не подходит: если нужен только флаг «идёт запрос» — он уже есть у эффекта, fx.pending.
Поведение
- Как и всё в Virentia — в каждом скоупе своё:
"fail"из теста никогда не покажется в приложении. - Побеждает последнее событие. При параллельных вызовах ранний успех даст
"done", пока поздний вызов ещё идёт, — там, где это важно, смотрите наstatusвместе сfx.pending. - В
resetможно передать любой юнит: событие, стор,doneдругого эффекта.