在第二次路径名更改时触发 useEffect

问题描述 投票:0回答:1

当用户更改页面时,我想向下滚动到英雄块下方。到目前为止,我的 App.jsx 中有此代码:

const { pathname } = useLocation()
 const paragraphRef = useRef(null)
 useEffect(() => {
    window.scroll({
      top: paragraphRef.current.offsetTop,
      behavior: "smooth",
      block: "start"
    })
  }, [pathname])

问题是我希望英雄块在第一次访问时可见,然后在每个页面上触发向下滚动。

reactjs react-hooks
1个回答
0
投票

您可以使用状态变量来跟踪用户之前是否访问过该页面:

  const { pathname } = useLocation();
  const paragraphRef = useRef(null);
  const [hasVisited, setHasVisited] = useState(false);

  useEffect(() => {
    if (hasVisited && paragraphRef.current) {
      window.scroll({
        top: paragraphRef.current.offsetTop,
        behavior: "smooth",
        block: "start",
      });
    } else {
      setHasVisited(true);
    }
  }, [pathname, hasVisited]);

说明: 状态变量(hasVisited):跟踪用户之前是否访问过该页面。最初,它是 false,这会阻止第一次访问时的滚动操作。

© www.soinside.com 2019 - 2024. All rights reserved.