Если удалённый элемент понадобится восстановить, сохраните его исходный DOM-узел с помощью retain: true. Когда узел больше не нужен, освободите его вручную.
Сохранить удалённый узел
const operation = effects.remove(element, {
retain: true,
});
await operation.finished;
const id = operation.removalId;
При retain: true отсоединённый оригинал хранится во внутреннем Map под непрозрачным RemovalId. Библиотека не перемещает его в скрытый контейнер или DocumentFragment.
Забрать и восстановить
take(id) одновременно возвращает узел и удаляет сильную ссылку из хранилища.
if (id) {
const retained = effects.take(id);
if (retained) {
destination.append(retained);
effects.restore(retained);
}
}
Приложение выбирает append, prepend, before или метод фреймворка. Библиотека работает уже с получившейся геометрией.
Освободить без восстановления
effects.discard(removalId); // boolean
effects.discardAll(); // количество освобождённых записей
destroy() также очищает всё хранилище.
Контроль памяти
TTL и лимита записей намеренно нет: библиотека не удаляет контент за пользователя. Поэтому каждый неиспользованный ID нужно забрать через take(), освободить через discard() либо очистить вместе с остальными через discardAll().
Когда освобождать сохранённый узел, решает приложение: например, после закрытия уведомления, смены маршрута или сохранения изменений в истории.
Удалить навсегда
Без retain удаление уже окончательно с точки зрения библиотеки:
effects.remove(element); // retain: false по умолчанию
После завершения ни объект операции, ни хранилище библиотеки не удерживают элемент.