Я создал компонент React, который может при необходимости прокручивать содержимое до верхней части страницы. Если вы посмотрите на пример песочницы кода, кнопка «GO Top» отобразится, если прокрутить немного вниз, если вы щелкните по ней, страница будет прокручиваться вверх, и если вы попытаетесь прокрутить вниз назад, это всегда приведет вас к началу страницы. Причина в том, что таймер не очищен, так как intervalId всегда равен нулю. в частности, если вы проверяете строку №20, intervalId всегда равен нулю, я думаю, это может быть связано с закрытием, но я не могу это исправить пожалуйста, помогите.
Спасибо!
код размещен ниже, код codeanbox здесь
import React from "react";
const GoTop = ({ scrollStepInPx, delayInMs }) => {
const [intervalId, setIntervalId] = React.useState(null);
const [position, setPosition] = React.useState(false);
React.useEffect(() => {
document.addEventListener("scroll", () => {
if (window.scrollY > 200) {
setPosition(true);
} else {
setPosition(false);
}
});
window.scrollTo(0, 0);
}, []);
const onScrollStep = () => {
if (window.pageYOffset === 0) {
console.log(intervalId); //always null
clearInterval(intervalId);
return;
}
window.scroll(0, window.pageYOffset - scrollStepInPx);
};
const scrollToTop = () => {
const id = setInterval(onScrollStep, delayInMs);
setIntervalId(() => id);
};
const renderGoTopIcon = () => {
if (position) {
return (
<button className="go-top" onClick={scrollToTop} type="button">
Go Top
</button>
);
}
return null;
};
return <>{renderGoTopIcon()}</>;
};
export default GoTop;