В библиотеке Tippy.js хук onDestroy
является одним из жизненных циклов тултипа, предоставляющим возможность
выполнить определённые действия в момент уничтожения экземпляра тултипа.
Этот хук вызывается один раз при полном удалении
тултипа с элемента, после чего экземпляр больше не может быть
использован.
Для использования onDestroy необходимо передавать его в
объект конфигурации при инициализации тултипа:
tippy('#myButton', {
content: 'Пример тултипа',
onDestroy(instance) {
console.log('Тултип уничтожен:', instance);
}
});
Здесь instance — это объект тултипа, содержащий всю
информацию о текущем состоянии:
reference — элемент, к которому привязан тултипpopper — DOM-элемент тултипаstate — внутреннее состояние тултипа, включая флаги
visible, mountedprops — текущие свойства тултипаonDestroy позволяет
корректно удалить все временные элементы или обработчики событий.tippy('#dynamicButton', {
content: document.createElement('div'),
onDestroy(instance) {
instance.popper.innerHTML = '';
}
});
let intervalId = setInterval(() => console.log('Тултип активен'), 1000);
tippy('#timerButton', {
content: 'Тултип с таймером',
onDestroy(instance) {
clearInterval(intervalId);
}
});
onDestroy можно использовать для корректного вызова их
методов очистки:tippy('#chartButton', {
content: '<div id="chart"></div>',
allowHTML: true,
onDestroy(instance) {
destroyChart(document.getElementById('chart'));
}
});
onCreate — вызывается один раз при инициализации
тултипаonMount / onShow — вызываются при каждом
отображении тултипаonHide / onUnmount — вызываются при
скрытии тултипаХук onDestroy отличается тем, что он не
вызывается при каждом закрытии тултипа, а только при полном
удалении экземпляра через метод destroy().
const instance = tippy('#destroyButton', {
content: 'Будет уничтожен'
});
// Позднее
instance.destroy(); // вызовет onDestroy один раз
onDestroy гарантирован после того, как тултип
полностью удалён из DOM.instance больше не
пригоден для повторного использования.onDestroy доступна вся информация об экземпляре,
что позволяет безопасно очищать любые связанные ресурсы.onDestroy для освобождения
памяти при работе с большим количеством тултипов.onDestroy. Это приведет к ошибкам.const instance = tippy('#complexButton', {
content: '<div class="tooltip-content">Контент</div>',
allowHTML: true,
onShow(instance) {
console.log('Тултип показан');
},
onHide(instance) {
console.log('Тултип скрыт');
},
onDestroy(instance) {
console.log('Тултип уничтожен, очищаем DOM и события');
instance.popper.querySelector('.tooltip-content').remove();
}
});
// Через некоторое время полностью уничтожаем тултип
setTimeout(() => {
instance.destroy();
}, 5000);
В этом примере:
onShow и onHide управляют видимостьюonDestroy освобождает ресурсы, удаляя динамический
контент и предотвращая утечки памятиИспользование хука onDestroy позволяет точно
контролировать жизнь тултипа, особенно при работе с
динамическим контентом, внешними библиотеками и асинхронными процессами,
гарантируя корректное освобождение ресурсов и стабильную работу
приложения.