javascript 打开新页面时滚动到顶部不起作用

v9tzhpje  于 2022-12-21  发布在  Java
关注(0)|答案(1)|浏览(180)

我需要作出React,从顶部打开新的一页。
我的gotoTop.js:

import { useEffect } from "react";
import { useLocation } from "react-router-dom";

export default function ScrollToTop() {
  const { pathname } = useLocation();

  useEffect(() => {
    window.scrollTo(0, 0);
  }, [pathname]);

  return null;
}

有时它会滚动到顶部,有时不会。看起来好像用户点击的元素低于下一页的大小,它不会工作。我很困惑为什么它不工作。
我已经在组件安装时和组件更新时尝试过了:

var something = document.getElementById('someid')
something.scrollIntoView()

但是这也不起作用,它在unmount中找不到元素,在update中也不起作用
我的app.js看起来像这样:

return (
    <StrictMode>
      <BrowserRouter>
      <ScrollToTop />
        <header className='navMenu'>
          <div className='navMenuInside'>
            <div className='navMenuCenter'>
              <Link onClick={handleLinkClick}>About</Link>
              <Link className="activeMenu" to="/">Projects</Link>
              <Link onClick={sendEmail}>E-mail</Link>
            </div>
          </div>
        </header>
        <Routes>
          <Route path="/projects/:id" element={<Details />} />
          <Route path="/" element={<Projects />} />
        </Routes>
        <Footer 
                linkedin={info.linkedin} 
                />
      </BrowserRouter>
    </StrictMode>
  );
oxcyiej7

oxcyiej71#

您应该尝试创建一个Wrapped component
就像这样:

const Wrapper = ({ children }) => {
  const location = useLocation();
  useLayoutEffect(() => {
    document.documentElement.scrollTo(0, 0);
  }, [location.pathname]);
  return children;
};

然后将其 Package 在应用程序或组件周围

<Wrapper>
    <App/>
</Wrapper>

相关问题