Сохраните ссылку на функцию, чтобы удалить ту же функцию, которую вы добавляете, вам также потребуется .bind(this)
.
export default class TaskHandlers {
constructor() {
this.element = document.querySelector(`#${addTaskElementId}`);
this.handleAddTaskClick = this.handleAddTaskClick.bind(this);
}
// Called from index.js
registerAddTaskClick(addTaskElementId) {
if (this.element !== null) {
this.element.addEventListener('click', this.handleAddTaskClick);
}
}
handleAddTaskClick(event) {
this.element.removeEventListener('click', this.handleAddTaskClick);
console.log('Clicked');
}
}
Обновление: Также удалитьэлемент, когда вы щелкаете по нему, а не раньше, чтобы вы знали, что к нему уже привязан прослушиватель.
Решение, которое может работать (если действительно необходимо сохранить экземпляр после изменениякод с HMR) предназначен для сохранения обработчика в объекте окна или глобальной переменной, которая не является частью обновляемого модуля, это не идеально, но может помочь вам, так как это исключительный случай.