Skip to content

Commit d29633d

Browse files
committed
cleanup event listeners
1 parent d2df640 commit d29633d

File tree

1 file changed

+18
-13
lines changed

1 file changed

+18
-13
lines changed

src/components/focus-active-link.tsx

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,26 +12,31 @@ export function ScrollActiveLink({activeLinkSelector}: Props) {
1212
useEffect(() => {
1313
const sidebar = document.querySelector('[data-sidebar-link]')?.closest('aside');
1414
if (!sidebar) {
15-
return;
15+
const noOp = () => {};
16+
return noOp;
1617
}
17-
sidebar.addEventListener('click', e => {
18+
const onLinkClick = (e: Event) => {
1819
const target = e.target as HTMLElement;
1920
if (target.hasAttribute('data-sidebar-link')) {
2021
const top = target.getBoundingClientRect().top;
2122
sessionStorage.setItem('sidebar-link-poisition', top.toString());
2223
}
23-
});
24+
};
25+
sidebar.addEventListener('click', onLinkClick);
2426
// track active link position on scroll as well
25-
sidebar.addEventListener(
26-
'scroll',
27-
debounce(() => {
28-
const activeLink = document.querySelector(activeLinkSelector);
29-
if (activeLink) {
30-
const top = activeLink.getBoundingClientRect().top.toString();
31-
sessionStorage.setItem('sidebar-link-poisition', top);
32-
}
33-
}, 50)
34-
);
27+
const onSidebarSroll = debounce(() => {
28+
const activeLink = document.querySelector(activeLinkSelector);
29+
if (activeLink) {
30+
const top = activeLink.getBoundingClientRect().top.toString();
31+
sessionStorage.setItem('sidebar-link-poisition', top);
32+
}
33+
}, 50);
34+
35+
sidebar.addEventListener('scroll', onSidebarSroll);
36+
return () => {
37+
sidebar.removeEventListener('click', onLinkClick);
38+
sidebar.removeEventListener('scroll', onSidebarSroll);
39+
};
3540
}, [activeLinkSelector]);
3641

3742
useEffect(() => {

0 commit comments

Comments
 (0)