我試圖在 onClick React 事件中洗掉和添加相同的事件偵聽器,因此當單擊目標元素時,會向父元素添加一個事件偵聽器。在下一次點擊時,它應該被移除而不是堆疊。
現在我知道每次單擊都會創建一個新函式,因此 add 和 removeEventListener 中的參考不同,這就是它不起作用的原因。
我不知道如何解決它,我將不勝感激。
現在它按預期作業,只有在下次單擊時不會洗掉該事件偵聽器,并且它們會堆積起來......
我要補充一點,它不能用狀態和行內樣式更改,因為該元素在 jsx 中不可訪問,但它是外部庫中圖表內的 svg 元素。
謝謝!
const barClick = (event) => {
const target = event.target as SVGRectElement;
// Function to change back
const changeBack = () => {
target.style.fill = cvar('colorPrimary');
console.log('changed');
};
// Remove to not stack
target.parentElement?.removeEventListener(
'click',
changeBack
);
// Change color
target.style.fill = cvar('colorSecondary');
// Add event so color is back to the same once clicked outside
target.parentElement?.addEventListener(
'click',
changeBack
);
};
uj5u.com熱心網友回復:
https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener
根據檔案,有一個名為的選項once可以添加到addEventListener函式中,以便在呼叫時自動洗掉
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/359549.html
標籤:javascript 反应 打字稿 dom 事件
