ReactJS - JavaScript AddEventListener не удаляет функцию слушателя при Unmount компонентаHtml

Программисты Html
Ответить Пред. темаСлед. тема
Anonymous
 ReactJS - JavaScript AddEventListener не удаляет функцию слушателя при Unmount компонента

Сообщение Anonymous »

Я добавил слушателя событий в событие "Keydown" в моем приложении ReactJS. Из-за сторонней библиотеки я добавляю ее через Settimeout в использовании, этот компонент похож на всплывающее окно, поэтому он много раз в жизни приложения. Это как ниже; < /p>

Код: Выделить всё

      useEffect(() => {
const timeoutID = setTimeout(() => {
clearTimeout(timeoutID);
window.addEventListener("keydown", theFunction, true);

}, 500);

function theFunction(event: KeyboardEvent) {
// do something
}

return () => {
window.removeEventListener("keydown", theFunction, true);
};
}, []);
Это типичное использование, чтобы удалить слушатель событий, используя метод removeEventListener . Проблема заключается в том, что когда компонент остается, событие остается и складывается поверх другого. Я на самом деле вижу это на вкладке слушателей событий на DevTools .
Я подозревал, что каждый раз, когда этот компонент сочетает, функция изменяется в памяти, поэтому это не та же функция, и поэтому React React не может его удалить. Я взял функцию из использования и положил ее в верхнюю часть компонента (за пределами определения функциональных компонентов, чуть ниже импорта).

Код: Выделить всё

// imports

function theFunction(event: KeyboardEvent) {
// do something
}

const Component = () => {
useEffect(() => {
const timeoutID = setTimeout(() => {
clearTimeout(timeoutID);
window.addEventListener("keydown", theFunction, true);

}, 500);

return () => {
window.removeEventListener("keydown", theFunction, true);
};
}, []);
и voila ! Событие теперь добавляет только один раз и не складывается. Зачем реагировать не удаляет этот состав EventListener в этом случае Unmount?>

Подробнее здесь: https://stackoverflow.com/questions/796 ... ction-at-c
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Html»