javascript - 使用 Switch (react-router) 时滚动到顶部

标签 javascript reactjs react-router react-router-v4

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

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

虽然这很有效,并且对于嵌套在 ScrollToTop 组件中的任何路由,用户都会滚动到顶部,但如果该组件放置在 Switch 组件中,则 Switch 不再像 Switch 那样工作;这意味着它将呈现它匹配的所有路由,而不是第一个。

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

版本:react-router-v4

最佳答案

我不确定具体关于滚动,但你可以将监听器附加到 browserHistory 这可能是一种简单的方法(我不认为 onUpdate 适用于 v4):

const browserHistory = createBrowserHistory();

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

<Router history={browserHistory} />

关于javascript - 使用 Switch (react-router) 时滚动到顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46868243/

相关文章:

javascript - 是否可以将上下文传递到使用 ReactDOM.render 实例化的组件中?

javascript - 在 React 函数中运行 setInterval() 会发生多次,并且随着时间的推移数量会迅速增加

javascript - 高阶组件无法访问包装组件的默认属性

reactjs - React Router 2.00 候选版本中未定义 browserHistory

reactjs - 如何删除 React Router 中的最后历史记录?

javascript - 如何让javascript在浏览器上解析json.gz文件

javascript - 解析 XML 文件不起作用

reactjs - 通过react-router <Link/>传递 Prop 的最佳实践是什么?

javascript - 在 console.log 中显示对象属性的原始顺序

node.js - 在 NodeJS/Express/React 堆栈中记录错误