javascript - 为什么从屏幕底部 react 新页面呈现?

标签 javascript reactjs react-router

我的 React 项目中有多个页面,每当我从一个页面切换到另一个页面时,页面位置从底部开始,但我想在呈现页面后保持在顶部。我目前正在使用路由器 v5,但找不到适用于路由器 v5 的任何解决方案。

我也试过另一个版本的解决方案,但是,它没有用,你能帮我解决这个问题吗?

这些是我迄今为止尝试过的一些示例,但没有一个有效。

<Router onUpdate={() => window.scrollTo(0, 0)} history={createBrowserHistory()}>
  ...
</Router>
function handleUpdate() {
  let {
    action
  } = this.state.location;

  if (action === 'PUSH') {
    window.scrollTo(0, 0);
  }
}

...

<Router
  onUpdate={handleUpdate}
/>

最佳答案

这是我用来解决这个问题的方案。创建一个新组件:

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

const ScrollToTop = ({ children }) => {
  const { pathname } = useLocation();

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

  return children || null;
};

export default ScrollToTop;

并将您的应用程序内容包装在浏览器路由器的内部

import React from 'react';
import { BrowserRouter } from 'react-router-dom';
import ScrollToTop from './components/scroll-to-top/scroll-to-top';

function App() {
  return (
    <div className="App">
      <BrowserRouter>
        <ScrollToTop>
          <div />
        </ScrollToTop>
      </BrowserRouter>
    </div>
  );
}

export default App;

关于javascript - 为什么从屏幕底部 react 新页面呈现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58598637/

相关文章:

javascript - ins1.addEventListener 不是函数

reactjs - 为什么官方文档建议在 setState 中使用 componentDidMount 而不是回调?

javascript - 如何在 React Native 中使用循环列出

javascript - React : setState() hook, 初始颜色未设置

react-router - 如何在react-router v4中获取查询参数

javascript - React 路由器不允许加载图像

javascript - 在 phonegap 应用程序中加载基本的身份验证安全图像

带有 ERB 标签的 JavaScript

javascript - 从输入文本中获取属性值

javascript - 验证 Redux 表单 : Nested Values