ИМХО, если вы хотите избежать прерывистой анимации, вы должны полагаться на управление DOM refs вместо React render ():
import React, { useState, useEffect, createRef } from 'react';
export default function Navbar() {
const ref = createRef();
useEffect(() => {
window.addEventListener('scroll', handleScroll);
});
handleScroll = (e) => {
const offset = window.pageYOffset;
ref.current.style.transform = `translateX(${({ offset }) => (offset > 100 ? '-50px' : '0px')})`;
}
return (
//...code
<StyledHeading ref={ref}>
Bookphiles <i className="fas fa-book-open" />
</StyledHeading>
//..code
);
}
Обратите внимание, что в моем коде может быть некоторая опечатка, но концепция заключается в том, чтобы не включать повторный рендеринг в управлении прокруткой.
Не забудьте удалить прослушиватель перед размонтированием компонента.