在滚动事件中响应 js 组件 re-render 两次

React js component re-render two times in scroll event

我想让 header 在向下滚动时不可见,在向上滚动时使它可见

const [showHeaderState, setShowHeaderState] = useState(true);
      const prevScrollpos = useRef(window.pageYOffset);
    
      const handleScroll = () => {
        const currentScrollPos = window.pageYOffset;
        prevScrollpos.current < currentScrollPos
          ? setShowHeaderState(false)
          : setShowHeaderState(true);
        prevScrollpos.current = currentScrollPos;
      };
    
      useEffect(() => {
        window.addEventListener('scroll', handleScroll);
        return () => window.removeEventListener('scroll', handleScroll);
      }, []);
    
      console.log(showHeaderState);

此代码有效

但是当我记录渲染状态时显示组件渲染了两次

on scroll up log true two times

on scroll down log false two times

任何解决方案??

仅仅因为 console.log 是 运行ning 并不意味着您的组件实际上渲染了两次,因为 React 可以 运行 组件功能的一部分,而无需在完整的过程中提交这些更改使成为。如果你想检查是否正在发生额外的完整渲染,请在没有依赖关系的效果挂钩中放置一个 console.log(每次出现 re-render 时都会 运行):

useEffect(() => { console.log("render") })

并查看它被记录了多少次。每次状态更改只能 运行 一次。

对这种现象提供了更完整的解释。