reset
Возвращает сторы к их начальным значениям, когда срабатывает clock, — все разом, одной транзакцией, в том скоупе, где clock сработал.
reset({ clock, target });
// clock: юнит или массив юнитов
// target: записываемый стор или массивВыход из аккаунта
Канонический случай — одно место, где перечислено всё, что не должно пережить логаут:
import { reset } from "@virentia/core/utils";
reset({ clock: loggedOut, target: [profile, cart, drafts, lastSearch] });Список и есть документация: всё сессионное сбрасывается здесь, и на ревью весь набор виден разом. Сбрасывается только скоуп, в котором сработал clock, — логаут в приложении не вычистит скоуп идущего рядом теста.
«Новая запись» и закрытие диалогов
Очистить сторы формы, когда пользователь начинает с чистого листа:
reset({ clock: [newRecordClicked, dialogClosed], target: [title, body, attachments, validationShown] });Несколько поводов, один список целей — и никаких продублированных реакций-чисток.
Чем это лучше ручного сброса?
Реакция, написанная руками, повторяет каждое начальное значение (title.value = "") и молча разъезжается с моделью, когда у стора меняется декларация. reset берёт начальное значение из самой декларации — чистке просто не с чем рассинхронизироваться.
Когда пригодится
- Логаут, смена сессии, команда «начать заново».
- Диалоги и визарды, чьи локальные сторы должны быть чистыми при следующем открытии.
- Тесты, которые переиспользуют скоуп и хотят известное чистое состояние между шагами.
Когда не подходит: цель-computed бросит ошибку в момент сброса — у неё нет начального значения, восстанавливать нечего. А если один стор сбрасывается по одному событию, хватит обычной реакции: reset окупается на списках.
Поведение
- Все цели коммитятся одной транзакцией: подписчики и computed видят полностью сброшенное состояние, а не наполовину расчищенное.
- Сбрасывается только скоуп срабатывания.
- Возвращает
Reaction— вызовитеstop(), если связка временная, или создавайте под владельцем.