という趣旨の投稿をXで見て、確かめてみたら本当だった。(元URLはコピーするの忘れてしまった)
という驚きをメモしておく次第。
こういうこと
const handleMouseMove = () => console.log("MOVING!");
window.addEventListener("mousemove", handleMouseMove);
// Later...
window.removeEventListener("mousemove", handleMouseMove);
って書くことはよくあるはず。
ハンドラを切り出しておかないといけないし、イベント名も列挙しないといけなくて、地味に面倒なやつ。
これがなんと、こう書ける。
const ac = new AbortController();
window.addEventListener("mousemove", () => console.log("MOVING!"), { signal: ac.signal });
// Later...
ac.abort();
abort()
するだけでいい!
useEffect()
みたいなシーンでも活躍間違いなし。
仕様書
If an AbortSignal is passed for options’s signal, then the event listener will be removed when signal is aborted. https://dom.spec.whatwg.org/#interface-eventtarget
fetch()
を中断する以外にも便利な用途があったのだなあ。