Перемещение во времени
Выберите любую транзакцию, и приложение покажет состояние сразу после неё. Как это делается, зависит от конфигурации, и deffector сообщает, каким способом это сделано.


Перемещение по истории
- двойной клик по строке в логе, выбор строки и Enter или кнопка Перейти к шагу в инспекторе;
- Ctrl+[ / Ctrl+] — на одну транзакцию назад / вперёд (на macOS работает и ⌘);
- Esc — назад в настоящее.
Шкала времени внизу каждой вкладки делает то же мышью:
| Элемент | Что делает |
|---|---|
| ⏮ К первому шагу | переход к первой транзакции |
| ‹ Шаг назад (Ctrl+[) | на одну транзакцию назад |
| › Шаг вперёд (Ctrl+]) | на одну транзакцию вперёд |
| ● Live | назад в настоящее |
| столбики | последние 160 транзакций; высота растёт с числом шагов; цвет отмечает ошибки, предупреждения, эффекты, правки и ветки. Клик по столбику — переход |
3 / 12 или live · 12 | текущая позиция |
| Commit | «Сделать текущее состояние базой и очистить историю» |
| Revert | «Вернуть состояние к последнему Commit» — выполняется одной правкой, поэтому попадает в лог и в трейс |
Пока приложение показывает прошлое, баннер пишет Просмотр транзакции #1 из 12, более поздние строки приглушены, а Commit / Revert недоступны. Переход к последней транзакции равносилен возврату в настоящее.
Две стратегии
Форк (с fork() и адаптером)
Если приложение использует fork() и рендерится через DeffectorProvider (или withDeffector / DeffectorScope во Vue), deffector создаёт новый scope из значений этого момента, берёт хендлеры эффектов живого scope и просит адаптер отрисовать приложение с ним. Подсказка в баннере: «приложение показывает форк этого момента; изменения в нём не трогают настоящее».
В настоящий scope ничего не записывается. Возврат в настоящее просто снова отрисовывает живой scope. Форк появляется в списке scope как ветка (⑂) с именем вида client @ #4.
На месте (глобальный режим или scope без адаптера)
Если отрисовать другой scope нечем, deffector записывает значения этого момента в живое состояние через launch (эти записи в лог не попадают). Watchers, sample и эффекты на них реагируют, поэтому результат не гарантирован. Текущие значения сначала сохраняются и записываются обратно при возврате в настоящее. Подсказка: «значения записаны в живое состояние на месте», а в глобальном режиме добавляется предупреждение: «Глобальный режим: переход записывает значения на месте, watchers и эффекты реагируют. Гарантий нет — лучше fork().»
Как получить стратегию с форком, описано в разделе Фреймворки.
Страница заблокирована, пока показывает прошлое

Клик по странице, которая показывает прошлое, изменил бы его. Поэтому, пока вы смотрите в прошлое, deffector накрывает страницу прозрачным слоем с небольшой плашкой: «deffector: приложение показывает транзакцию #N — клики заблокированы, чтобы не изменить прошлое». Клики, события указателя и ввод с клавиатуры до приложения не доходят. Esc на странице или Вернуться в настоящее на плашке возвращают в настоящее.
Разрешить клики (на плашке) или снятый флажок Блокировать клики (в баннере панели) убирают слой: «Страница принимает клики: изменения идут в ветку». При стратегии с форком всё, что вы делаете дальше, происходит в форке и попадает в лог с бейджем ветка — быстрый способ проверить «а что, если бы я нажал другое». Настоящее по-прежнему не тронуто.
Чтобы совсем отключить слой, передайте lockPast: false в attachDeffector.
Правки в прошлом
Правка стора, вызов события или применение пресета, пока приложение показывает прошлое, действуют на тот scope, который вы смотрите, — на форк, а не на настоящее.
Когда DevTools закрываются
Если панель отключается, пока приложение показывает прошлое, агент сам возвращается в настоящее.