【发布时间】:2019-09-30 20:33:49
【问题描述】:
我正在尝试实现一个简单的 Header 组件,该组件在到达某个滚动位置后会隐藏标题。
我想出了以下解决方案,并认为只有在 headerState 的值实际发生变化时才会重新渲染 Header 组件,但事实并非如此。该组件将在每次滚动位置更改时重新呈现,即使 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>
)
};
【问题讨论】:
标签: reactjs react-hooks