Перейти к содержимому
Star

Перемещение во времени ​

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

Панель во время просмотра транзакции #1 из 12: синий баннер с «Блокировать клики» и «Вернуться в настоящее (Esc)», следующие строки приглушеныПанель во время просмотра транзакции #1 из 12: синий баннер с «Блокировать клики» и «Вернуться в настоящее (Esc)», следующие строки приглушены

Перемещение по истории ​

  • двойной клик по строке в логе, выбор строки и 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: the app shows transaction #1» с кнопками Back to present и Allow clicks

Клик по странице, которая показывает прошлое, изменил бы его. Поэтому, пока вы смотрите в прошлое, deffector накрывает страницу прозрачным слоем с небольшой плашкой: «deffector: приложение показывает транзакцию #N — клики заблокированы, чтобы не изменить прошлое». Клики, события указателя и ввод с клавиатуры до приложения не доходят. Esc на странице или Вернуться в настоящее на плашке возвращают в настоящее.

Разрешить клики (на плашке) или снятый флажок Блокировать клики (в баннере панели) убирают слой: «Страница принимает клики: изменения идут в ветку». При стратегии с форком всё, что вы делаете дальше, происходит в форке и попадает в лог с бейджем ветка — быстрый способ проверить «а что, если бы я нажал другое». Настоящее по-прежнему не тронуто.

Чтобы совсем отключить слой, передайте lockPast: false в attachDeffector.

Правки в прошлом ​

Правка стора, вызов события или применение пресета, пока приложение показывает прошлое, действуют на тот scope, который вы смотрите, — на форк, а не на настоящее.

Когда DevTools закрываются ​

Если панель отключается, пока приложение показывает прошлое, агент сам возвращается в настоящее.