首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用交换机时滚动到顶部(react-router)

使用交换机时滚动到顶部(react-router)
EN

Stack Overflow用户
提问于 2017-10-22 05:23:40
回答 3查看 7.6K关注 0票数 8

当从一个页面导航到另一个页面时,我希望用户自动滚动到顶部,即scrollTo(0, 0)

根据react-router docs on scroll restoration的说法,推荐的方法是设置一个组件ScrollToTop并将您的路由包装在其中。

虽然这很好用,并且用户可以滚动到ScrollToTop组件中嵌套的任何路由的顶部,但如果组件放在Switch组件中,Switch将不再像开关一样工作;这意味着它将呈现它匹配的所有路由,而不是第一个路由。

或者,将ScrollToTop放在Switch之外,它不再将用户滚动到顶部。

版本:react-router-v4

EN

回答 3

Stack Overflow用户

发布于 2017-10-22 06:25:09

我不确定具体的滚动,但你可以附加一个监听器到browserHistory,这可能是一个简单的方法(我不认为onUpdate与v4一起工作):

代码语言:javascript
复制
const browserHistory = createBrowserHistory();

browserHistory.listen((location, action) => {
  window.scrollTo(0, 0);
});

<Router history={browserHistory} />
票数 10
EN

Stack Overflow用户

发布于 2017-10-22 05:36:31

我也遇到了同样的问题,每当更新时,它都会将用户带到scrollTo(0,0)

代码语言:javascript
复制
<Router onUpdate={() => window.scrollTo(0, 0)} history={createBrowserHistory()}>
  ...
</Router

如果上述方法不起作用:

react-router-v4 scroll Restoration

这很容易处理一个组件,该组件将在每次导航时向上滚动窗口,请确保将其包装在withRouter中,使其能够访问路由器的道具:

代码语言:javascript
复制
 componentDidUpdate(prevProps) {
    if (this.props.location !== prevProps.location) {
      window.scrollTo(0, 0)
    }
  }

  render() {
    return this.props.children
  }
}

然后将其渲染到应用程序的顶部,但在Router下方

代码语言:javascript
复制
const App = () => (
  <Router>
    <ScrollToTop>
      <App/>
    </ScrollToTop>
  </Router>
)

上面的代码是从React-Router web guides复制的

票数 2
EN

Stack Overflow用户

发布于 2017-10-22 17:44:54

我设法解决了这个问题,使用了react-router-v4滚动恢复,并将ScrollToTop放在Switch之外。还要记住使用withRouter,否则它将无法工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46868243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档