I am currently trying to create a piece of code that will mode a div when the user scrolls past a certain place. to do this i used window.addEventListener('scroll', () => checkSection(scrollSection, setScrollSection)) where i pass both of the variables returned from React.useState(0), then from within the event listener i check to see if the window.scrollY property is more than the value in the scrollSection state and if so translate it with js. but no matter what i do the function provided to update the state isnt updating the state, its not slow its just not updating at all. I was wondering if this is because i passed it into an event listener?
Event Listener and useState Initialization
function SideNav(props: any) {
const [scrollSection, setScrollSection] = React.useState(0);
React.useEffect(() => {
window.addEventListener('scroll', () => checkSection(scrollSection, setScrollSection));
return () => {
window.removeEventListener('scroll', () => checkSection(scrollSection, setScrollSection));
};
}, []);
Function passed to event listener
function checkSection(scrollSection: number, setScrollSection: Function){
let scrollSections = [0, 1538, 2583, 2089, 3089]
const scrollY = window.scrollY;
setScrollSection(1);
console.log("scroll Y: "+scrollY);
console.log("section: "+scrollSection)
}
removeEventListener. 2. Your event listener closes over the first version ofscrollSection, not the updated version later calls to your component function see.() => checkSection(scrollSection, setScrollSection)in a variable and passing that to thewindow.addEventListenerandwindow.closeEventListener? also I'm not sure how to fix the second problem you listed.const handler = () => checkSection(scrollSection, setScrollSection);, then usehandlerboth in theaddEventListenercall and theremoveEventListenercall.