// again, with hooks function NeonCursor() { const [position, setPosition] = React.useState({ top: 0, left: 0 }); React.useEffect(() => { function handleMouseMove(event) { setPosition({ top: event.pageY, left: event.pageX, }); } // list of actions inside one hook document.addEventListener('mousemove', handleMouseMove); document.body.classList.add('no-cursor'); // we're returning a function that remove our effects return () => { document.body.classList.remove('no-cursor'); document.removeEventListener('mousemove', handleMouseMove); }; }); return ( <img src="./cursor.png" width={30} style={{ position: 'absolute', top: position.top, left: position.left, pointerEvents: 'none', }} /> ); }