destroyМетод destroy в Cleave.js используется для полного
удаления экземпляра форматирования, созданного на входном элементе. Он
завершает работу библиотеки для конкретного инстанса, снимает все
связанные обработчики событий, очищает внутренние ссылки и возвращает
DOM-элемент в исходное состояние без активного форматирования.
Ключевая задача метода — предотвращение утечек памяти и корректное освобождение ресурсов при динамическом управлении формами, особенно в SPA-приложениях.
destroyПри вызове destroy выполняется несколько внутренних
операций:
После вызова метод экземпляр считается невалидным для дальнейшего использования.
Метод вызывается на экземпляре Cleave:
const cleave = new Cleave(inputElement, {
phone: true,
phoneRegionCode: 'US'
});
cleave.destroy();
Возвращаемое значение отсутствует. Вызов носит побочный характер и полностью изменяет состояние экземпляра.
После выполнения destroy input-элемент:
Важно, что метод не удаляет сам DOM-элемент и не изменяет его атрибуты напрямую, если это не связано с внутренней логикой Cleave.js.
В приложениях на React, Vue или Angular часто требуется уничтожать экземпляры при размонтировании компонента:
class PhoneInput {
constructor(input) {
this.cleave = new Cleave(input, {
phone: true
});
}
destroy() {
this.cleave.destroy();
}
}
Это предотвращает накопление неиспользуемых обработчиков событий при повторных рендерах.
При необходимости смены типа форматирования сначала уничтожается старый экземпляр:
cleave.destroy();
cleave = new Cleave(inputElement, {
numeral: true,
numeralThousandsGroupStyle: 'thousand'
});
Такой подход исключает конфликт старых настроек с новыми.
В формах, где поля создаются и удаляются динамически,
destroy используется при удалении поля из DOM:
function removeField(field) {
field.cleaveInstance.destroy();
field.element.remove();
}
Повторный вызов destroy на уже уничтоженном экземпляре
может привести к ошибкам или отсутствию эффекта, так как внутренние
ссылки уже обнулены. Библиотека не предназначена для повторного
использования инстанса после уничтожения.
Cleave.js добавляет обработчики событий, таких как:
inputkeydownfocusblurПосле вызова destroy:
Это особенно важно для предотвращения дублирующей логики при повторной инициализации.
В длительно работающих интерфейсах неправильное управление экземплярами Cleave.js приводит к накоплению:
Метод destroy устраняет эти риски, обеспечивая
корректное освобождение памяти.
При переключении режимов форматирования важно строго соблюдать порядок:
if (cleave) {
cleave.destroy();
}
cleave = new Cleave(inputElement, {
date: true,
datePattern: ['Y', 'm', 'd']
});
Нарушение этого порядка может привести к наложению обработчиков и некорректному форматированию ввода.
В React-окружении destroy обычно вызывается в
useEffect cleanup:
useEffect(() => {
const cleave = new Cleave(inputRef.current, {
numeral: true
});
return () => {
cleave.destroy();
};
}, []);
Такой подход гарантирует, что при размонтировании компонента экземпляр полностью освобождается.
Во Vue логика аналогична и обычно привязывается к хуку
beforeUnmount:
beforeUnmount() {
this.cleave.destroy();
}
Это предотвращает сохранение активных обработчиков после удаления компонента.
Метод destroy не выполняет следующих действий:
Часто встречаются следующие ошибки:
destroy, что приводит к
двойному форматированию;destroy при удалении динамических
элементов;Каждая из этих ситуаций приводит к нестабильному поведению ввода и утечкам памяти.
При вызове destroy Cleave.js выполняет
последовательность:
После этого объект перестаёт участвовать в жизненном цикле библиотеки.
Метод играет ключевую роль в управлении жизненным циклом масок ввода. В условиях динамических интерфейсов он обеспечивает: