Я пытаюсь реализовать простой компонент Header, где заголовок будет скрываться после достижения определенной позиции прокрутки.
Я пришел к следующему решению и подумал, что повторное рендеринг компонента Header
будетпроисходит только в том случае, если значение headerState
действительно изменилось, а это не то, что происходит. Компонент будет перерисовываться при каждом изменении позиции прокрутки, даже когда setHeaderState
даже не вызывается.
Что мне здесь не хватает? Это рендеринг, потому что я использую useWindowScroll
и могу ли я как-то избежать этого?
import { useWindowScroll } from "react-use";
const useHeaderState = () => {
const [ headerState, setHeaderState ] = React.useState(0);
const { y } = useWindowScroll();
React.useEffect(() => {
if (y > 50 && headerState !== 1) {
setHeaderState(1);
}
}, [y, headerState]);
return headerState;
}
const Header: React.FC = () => {
const headerState = useHeaderState();
console.log("rerender");
return (
<header
className={cn(
"fixed top-0 left-0 w-full text-white z-30 transition-transform transition-250",
headerState === 1 && "-translate-16",
)}
>
<div className="bg-gray-900 h-16 md:h-32">header</div>
</header>
)
};