react 回退到前一页面对应位置

  由于react的在跳转页面的时候,实际做了unmount的动作,清楚了前一页面的内容,返回的时候实际上是需要重新渲染的,相应的跳转位置就会丢失。我再做项目开发的过程中也遇到了相同的问题,我把我解决的过程分享给大家,希望能够帮到你。

 解决问题的技术背景

1.我们的app是使用了上啦加载下啦刷新的插件(自己封装的),采用的是固定的高度(屏幕高度),自定义滚动轴(非浏览器滚动轴),这个插件会实时的记录滚动位置。

2.APP首页分为十一个子模块,每个子模块都有一个接口去拉取对应模块的数据,拉取完成后会将数据存储到redux里面

3.首页的每个模块都有很多链接跳转到其他页面(商品列表,商品详情,活动专题页面,快速下单页面等)

4.app使用的技术栈react + redux + react-router 

存在的问题以及要解决的问题

1.首页滚动后跳转到其他页面,然后点击返回的时候,首页又重新回到了首页,如果已经滚动了十几页,客户再访问的时候又需要重新滚动到下面,体验很差,运营希望解决掉这个问题,返回的时候还返回到对应跳走的位置,不仅仅是首页 也包括(产品列表页,专题页面,快速下单页面,文章列表页面等)

解决过程

解决思路如下

1.我采用的是把数据先全部保存到redux里面,减少返回重新请求服务器的次数,也减少请求服务器的时间

2.在页面跳转的时候,由于首页,列表页,快速下单,以及其他的列表页面我都引入了上啦加载下拉刷新组件(我再后面的介绍中撑为pullload),在pulload中实际上是有实时将scroll位置记录到redux里面的,所以我只要在pullload 卸载(unmount)的时候将scroll位置以及对应的页面记录到redux里面就可以了。

3.在history.back的时候,判断redux里面是否有当前页面的值,如果有取出来

4.在 componentDidMount中判断是否有对应的scroll值,如果有,则 在setTimeout中调用pulload的moveTo方法滚动到对应位置

5.因为直接pullLoad到对应位置会先展示页面的头部在跳转到对应位置,先的很生硬,所以我再state中加了一个visibility:visible状态变量,滚动到对应位置后,200秒延迟将页面显示出来

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您使用的是 `react-native-router-flux`,您可以在跳转到下一个页面时,将参数传递为 `null`。这样,当您退到上一个页面时,上一个页面的参数就会被清除。以下是一个示例代码: ```jsx import { Actions } from 'react-native-router-flux'; // 跳转到下一个页面并传递参数 Actions.nextPage({ param: 'value' }); // 退到上一个页面并清除参数 Actions.pop({ refresh: { param: null } }); ``` 在上面的代码中,我们首先使用 `Actions.nextPage()` 跳转到下一个页面并传递参数。然后,我们在退到上一个页面时使用 `Actions.pop()` 并传递一个 `refresh` 参数。这将触发上一个页面的 `onRefresh` 方法,您可以在其中清除参数。以下是一个示例代码: ```jsx import { Actions } from 'react-native-router-flux'; class PreviousPage extends React.Component { onRefresh() { // 清除参数 this.setState({ param: null }); } render() { const { param } = this.state; return ( <View> <Text>Previous Page</Text> <Text>Param: {param}</Text> </View> ); } } // 将上一个页面注册到 router const RouterComponent = () => ( <Router> <Scene key="previousPage" component={PreviousPage} onRefresh={() => Actions.refresh({ param: null })} /> <Scene key="nextPage" component={NextPage} /> </Router> ); ``` 在上面的代码中,我们在上一个页面的 `onRefresh` 方法中清除了参数。我们还在注册上一个页面时使用了 `onRefresh`,以便在退时自动清除参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值