Почему накапливается addEvenetListener в хуке useEffect?

Функционал: ввод текста в input, создание списка путем нажатия enter.

https://codesandbox.io/s/awesome-tereshkova-96pf3?file=/src/App.js

У меня есть два addEventListener. Один вне всяких хуков, другой - в useEffect.

  1. Какой логике подчиняется тот, что лежит вне хуков?
  2. Почему при нажатии на элемент списка количество кликов удваивается?
  3. Какой чертой обладает addEventListener, из-за которой он накапливается в хуке useEffect и требует очистки? Почему console.log(), например, не накапливается?

Ответы (1 шт):

Автор решения: Sanya H

я же уже Вам давал ответ!

listenerClicks = [];
addEventListener("click", function)
listenerClicks = [
    function
];
addEventListener("click", function)
listenerClicks = [
    function,
    function
];
addEventListener("click", function)
listenerClicks = [
    function,
    function,
    function
];

и так далее

При клике происходит проход по массиву listenerClicks и вызов функций. И пока Вы не удалите добавленную туда функцию, до тех пор и будет происходит их вызов при каждом клике.

Почему вызывается несколько раз addEventListener в useEffect? - Потому что у вашем случае useEffect срабатывает первый раз при монтировании компонента, а далее при каждом изменении состояния Вашего todos

→ Ссылка