基于react的umi项目开发中遇到页面之间跳转,有的页面跳转过来需要回到顶部,有的页面需要滚动到指定的位置,常见一些列表页面跳转详情页面,再跳转回来
找了很多资料用了很多方法,都没实现,后面摸索出这个方法
解决方案记录:
- 先是回到顶部解决方案:
// 在layout组件绑定了节点,监听地址path变化 可以实现跳转后回到顶部
const layoutWrapper = useRef()
useEffect(()=>{
layoutWrapper.current.scrollTop = 0
// console.log(layoutWrapper.current.scrollTop)
},[props.location.pathname])
2. 详情页面跳转回来滚动到原来位置
// 跳转详情页面前记录点击的那个节点的id,并存储在sessionStorage,不会丢失,便于跳转回来的时候获取
const goVideoDetails = id => {
router.push({pathname: '/videodetails', query: {id}})
sessionStorage.setItem('scrollId', id)
}
// 判断是否要回到指定位置
// 如果是其他页面调整过来就清除sessionStorage,如果是通过返回方式回到该页面,就获取保存的节点,并滚动到该位置,直接用scrollIntoView()这个方法
useEffect(()=>{
if(history.action === 'PUSH'){
sessionStorage.removeItem('scrollId')
return
}
let id = sessionStorage.getItem('scrollId')
console.log(id)
document.getElementById(id).scrollIntoView()
},[])