2remote/yaopai-mobile

React-router 如何获得上一次路径?

Closed this issue · 3 comments

在作品列表页点击某一个作品进入作品详情,再返回作品列表页的时候无法重新定位到之前点击的位置

@zaxlct @amile1860 @stonemakers

方法一:

this.history.listenBefore(location => {
  return 'Are you sure you want to leave this page?'
})

https://github.com/ReactJSTraining/history/blob/master/docs/ConfirmingNavigation.md

所以可以写成这样:

this.history.listenBefore(location => {
  this.history.pushState({lastPage : this.props.location.pathname});
})

方法二:

实际上 history 的方法还有很多
image

直接用 goBack() 就好了。


PS: 判断高度的方式不可取,因为我们是无限滚动的,当你跳转到第一页的底部之后,就没办法再跳了。

关于这个问题,一般是用 「URL 锚点」来解决的。
参考这篇文章: URL锚点HTML定位技术机制、应用与问题

不过我觉得没必要精确到单张作品,精确到页数就足够了。
这样的话,只需要在翻页的时候把页数记录到 react router 里面就可以解决这个问题了。

刷了一遍文档,
看了 location 对象、history对象,
简单了解下 React-Router 原理,我对我之前的 Comment 表现的无知感到羞愧

@liubiantao
「在作品列表页点击某一个作品进入作品详情,再返回作品列表页的时候无法重新定位到之前点击的位置」

这个需求暂时做不了

  1. 技术方面
    我们是单页面应用,如果通过URL锚点 (location.hash) 来达到目的会和 React-Router 冲突(也可能有更好的办法吧,没找到)
  2. 体验方面
    如果用户在作品列表页翻的很深,进入作品详情页再返回作品列表页,难道一下子要把这个作品之前所有的作品都加载出来吗