Skip to content

reset

Возвращает сторы к их начальным значениям, когда срабатывает clock, — все разом, одной транзакцией, в том скоупе, где clock сработал.

ts
reset({ clock, target });
// clock: юнит или массив юнитов
// target: записываемый стор или массив

Выход из аккаунта

Канонический случай — одно место, где перечислено всё, что не должно пережить логаут:

ts
import { reset } from "@virentia/core/utils";

reset({ clock: loggedOut, target: [profile, cart, drafts, lastSearch] });

Список и есть документация: всё сессионное сбрасывается здесь, и на ревью весь набор виден разом. Сбрасывается только скоуп, в котором сработал clock, — логаут в приложении не вычистит скоуп идущего рядом теста.

«Новая запись» и закрытие диалогов

Очистить сторы формы, когда пользователь начинает с чистого листа:

ts
reset({ clock: [newRecordClicked, dialogClosed], target: [title, body, attachments, validationShown] });

Несколько поводов, один список целей — и никаких продублированных реакций-чисток.

Чем это лучше ручного сброса?

Реакция, написанная руками, повторяет каждое начальное значение (title.value = "") и молча разъезжается с моделью, когда у стора меняется декларация. reset берёт начальное значение из самой декларации — чистке просто не с чем рассинхронизироваться.

Когда пригодится

  • Логаут, смена сессии, команда «начать заново».
  • Диалоги и визарды, чьи локальные сторы должны быть чистыми при следующем открытии.
  • Тесты, которые переиспользуют скоуп и хотят известное чистое состояние между шагами.

Когда не подходит: цель-computed бросит ошибку в момент сброса — у неё нет начального значения, восстанавливать нечего. А если один стор сбрасывается по одному событию, хватит обычной реакции: reset окупается на списках.

Поведение

  • Все цели коммитятся одной транзакцией: подписчики и computed видят полностью сброшенное состояние, а не наполовину расчищенное.
  • Сбрасывается только скоуп срабатывания.
  • Возвращает Reaction — вызовите stop(), если связка временная, или создавайте под владельцем.