在使用react-router做路由的时【关注微信公众号:wwwtangshuangnet】本文版权归作者所有,未经授权不得转载。候,会发现如果直接使用,当你采用一些特殊【转载请注明来源】【作者:唐霜】的overflow元素时,会发现切换页面【版权所有】唐霜 www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】后scrollbar在原位不动,这导致一【版权所有】唐霜 www.tangshuang.net著作权归作者所有,禁止商业用途转载。些不好的体验,因为用户切换界面常常是要查【原创不易,请尊重版权】【版权所有】唐霜 www.tangshuang.net看全新的内容。之所以产生这个问题,很大的本文作者:唐霜,转载请注明出处。【作者:唐霜】原因是virtual dom带来的负面影【版权所有】唐霜 www.tangshuang.net【转载请注明来源】响。virtual dom仅利用数据对要本文版权归作者所有,未经授权不得转载。本文作者:唐霜,转载请注明出处。生成的dom结构做diff计算,只更新那未经授权,禁止复制转载。【访问 www.tangshuang.net 获取更多精彩内容】些改变了的元素。而react-route【作者:唐霜】转载请注明出处:www.tangshuang.netr带来的结果是,仅route内部组件的部原创内容,盗版必究。【原创内容,转载请注明出处】分节点发生了变化。所以,对于有scrol【版权所有,侵权必究】【未经授权禁止转载】lbar的那个元素而言,没有变动,scr【作者:唐霜】本文版权归作者所有,未经授权不得转载。ollbar的位置也不会改变。
【原创内容,转载请注明出处】【关注微信公众号:wwwtangshua本文版权归作者所有,未经授权不得转载。本文作者:唐霜,转载请注明出处。ngnet】本文版权归作者所有,未经授权不得转载。【本文首发于唐霜的博客】解决的办法是创建一个container组转载请注明出处:www.tangshuang.net本文版权归作者所有,未经授权不得转载。件,在这个组件中去执行dom操作,让sc【本文首发于唐霜的博客】著作权归作者所有,禁止商业用途转载。rollbar跳转到顶部去:
【本文受版权保护】【访问 www.tangshuang.n本文作者:唐霜,转载请注明出处。著作权归作者所有,禁止商业用途转载。et 获取更多精彩内容】【本文首发于唐霜的博客】【原创不易,请尊重版权】import { withRouter } from "react-router-dom";
class ScrollToTop extends Component {
componentDidUpdate(prevProps) {
if (this.props.location.pathname !== prevProps.location.pathname) {
document.getElementById("page").scrollTo(0, 0);
}
}
render() {
return this.props.children;
}
}
const PageContainer = withRouter(ScrollToTop);
// ... 下面是渲染部分 ...
<Router>
<PageContainer>
{/* 你的正常的渲染内容 */}
</PageContainer>
</Router>
解决的方法非常简单,就是在Router下【转载请注明来源】转载请注明出处:www.tangshuang.net面再放一个根性质的组件,Router会给【版权所有】唐霜 www.tangshuang.net原创内容,盗版必究。下面的组件传递location, mat【转载请注明来源】【本文受版权保护】ch等props,所以,可以在这个组件里【本文首发于唐霜的博客】本文作者:唐霜,转载请注明出处。面进行监听,通过判断来决定是否要执行sc本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshuang.netrollTo(0, 0)这样的操作。上面【访问 www.tangshuang.net 获取更多精彩内容】【版权所有】唐霜 www.tangshuang.net红色的部分则是需要自己进行修改,甚至,你【未经授权禁止转载】【原创不易,请尊重版权】可以把这个组件进行丰富,根据你的项目需要未经授权,禁止复制转载。本文版权归作者所有,未经授权不得转载。来决定什么时候要跳,哪些元素要跳。
【版权所有】唐霜 www.tangshu著作权归作者所有,禁止商业用途转载。【关注微信公众号:wwwtangshuangnet】ang.net【本文首发于唐霜的博客】
