现状:目前从商品详情页返回到商品列表页,还需要再去请求服务数据,还需要用户再去等待获取数据的过程,这样用户体验非常不好,

遇到的问题:

1:如何将数据缓存,

2:如何获取和保存列表滑动的高度,

3:判断商品列表页的上一个页面是什么?

如果是从搜索页进到商品列表页的话我们需要清除缓存,获取接口数据,

如果是商品详情页返回到商品列表页的话就用缓存数据,并且滑到到上次浏览的位置。

一:数据缓存

使用react全家桶reducers保存数据

   dispatch({
type: types.PRODUCT_LIST,
productlist: oldList.concat(data.result),
totalPage: data.totalPage,
curPage: page,
totalCount: data.totalCount
});

二:获取和保存列表滑动的高度

在商品列表页销毁方法里记录滑动高度

     componentWillUnmount(){
var top = $(document).scrollTop();
window.sessionStorage.setItem("top",top);
window.sessionStorage.setItem("isUseCacheProductList",false); }

三:判断商品列表页的上一个页面是什么

在商品详情页离开时劫持路由,判断如果是去商品列表页的话,就设置标识为true。

以下每一步都很关键

商品详情页代码:

import {Router} from 'react-router'
Product.contextTypes = {
store: React.PropTypes.object,
router: React.PropTypes.object.isRequired
};
    componentWillMount() {
/* 发起请求 */
this.props.actions.initState();
this.context.router.setRouteLeaveHook(
this.props.route,
this.routerWillLeave
)
}
  routerWillLeave( nextLocation ){
console.log("路由跳转---"+ nextLocation.pathname);
if(nextLocation.pathname == '/product/list'){
window.sessionStorage.setItem("isUseCacheProductList",true);
}
}

在商品列表页获取isUseCacheProductList这个标识,如果为true,说明是商品详情页返回来的,那么久使用缓存数据,

商品列表页代码:

渲染函数里自动滑动到上次浏览位置

render() {
const {store} = this.context;
var isUseCache =
window.sessionStorage.getItem("isUseCacheProductList");
var top = window.sessionStorage.getItem("top");
if(isUseCache == "true"){
$("html,body").animate({scrollTop: top + "px"}, 0);
}
}

这里判断是否需要请求接口数据还是使用缓存数据

componentDidMount() {
const {store} = this.context;
var isUseCache = window.sessionStorage.getItem("isUseCacheProductList");
if(isUseCache != "true"){
this.props.actions.findProductList("", 1, store.getState().productTodos.pageSize, this.state.categoryId, this.state.keyword, [],isShowInStock,slectString,store.getState().commonTodos.userTypeCode);
} }

商品列表页销毁时记录滑动距离,重置 isUseCacheProductList 标识为false。

    componentWillUnmount(){
//window.addEventListener('scroll', this.handleScroll);
var top = $(document).scrollTop();
window.sessionStorage.setItem("top",top);
window.sessionStorage.setItem("isUseCacheProductList",false);
console.log("距离顶部距离="+top)
}

react 从商品详情页返回到商品列表页,列表自动滚动上次浏览的位置的更多相关文章

  1. 自己定义ViewGroup实现仿淘宝的商品详情页

    近期公司在新版本号上有一个须要. 要在首页加入一个滑动效果, 详细就是仿照X宝的商品详情页, 拉到页面底部时有一个粘滞效果, 例如以下图 X东的商品详情页,假设用户继续向上拉的话就进入商品图文描写叙述 ...

  2. 在ecshop商品详情页显示供货商

    好久没写文章了,隐约记得前几天有人问到这个问题:[如何在ecshop商品详情页面显示该商品的供货商?] 今天有时间整理下,分享给大家. 注:以下修改适用于ecshop2.7.2,其他版本未做测试. 1 ...

  3. 第04项目:淘淘商城(SpringMVC+Spring+Mybatis)【第九天】(商品详情页面实现)

    https://pan.baidu.com/s/1bptYGAb#list/path=%2F&parentPath=%2Fsharelink389619878-229862621083040 ...

  4. 微信小程序电商实战-商品详情(上)

    先看一下今天要实现的小程序商品详情页吧!   商品详情.gif 本期我们要实现小程序商品详情页的头部标题.头部轮播.商品详情浮动按钮和商品内页布局. 一.设置头部标题 如上图所示,头部标题是商品详情 ...

  5. python3 - 商品管理的程序,商品信息都存在一个json串里面

    商品管理的程序,商品信息都存在一个json串里面 1.查询商品信息 #校验商品是否存在 2.新增商品 # #校验商品是否存在 #校验价格是否合法 3.修改商品信息 ##校验商品是否存在 if chic ...

  6. 商品详情页系统的Servlet3异步化实践

    http://jinnianshilongnian.iteye.com/blog/2245925 博客分类: 架构   在京东工作的这一年多时间里,我在整个商品详情页系统(后端数据源)及商品详情页统一 ...

  7. Android跳转淘宝、京东APP商品详情页

    import Android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; imp ...

  8. 高并发 Nginx+Lua OpenResty系列(10)——商品详情页

    本章以京东商品详情页为例,京东商品详情页虽然仅是单个页面,但是其数据聚合源是非常多的,除了一些实时性要求比较高的如价格.库存.服务支持等通过AJAX异步加载加载之外,其他的数据都是在后端做数据聚合然后 ...

  9. Ecshop商品详情页显示当前会员等级价格

    会员登录状态下,在ECSHOP商品详情页的本店售价中显示当前登录会员对应的等级价格,在未登录状态下,则还默认显示原来的本店售价. 解决方法: 这个需要修改ECSHOP程序代码来实现. 打开文件 /in ...

随机推荐

  1. 【转】django rest framework ModelSerializer 、serializers小结

    转自:https://blog.csdn.net/l_vip/article/details/79156113 引言 serializers是什么?官网是这样的”Serializers allow c ...

  2. Python常用的库简单介绍一下

    Python常用的库简单介绍一下fuzzywuzzy ,字符串模糊匹配. esmre ,正则表达式的加速器. colorama 主要用来给文本添加各种颜色,并且非常简单易用. Prettytable ...

  3. Android图片缩放 指定尺寸

    //使用Bitmap加Matrix来缩放     public static Drawable resizeImage(Bitmap bitmap, int w, int h)     {       ...

  4. css实现不定宽高的div水平、垂直居中

    一共有三个方案: 1,第一种方案主要使用了css3中transform进行元素偏移,效果非常好 这方法功能很强大,也比较灵活,不仅仅局限在实现居中显示.  兼容方面也一样拿IE来做比较,第二种方法IE ...

  5. Vue学习(二) :第一个Vue项目

    OS: Windows 10 Home 64bit Chocolatey version: 0.10.13 npm version: 6.4.1 yarn version: 1.16.0 git ve ...

  6. C#调用本地摄像头-AForge库简单使用

    介绍 AForge百度词条: https://baike.baidu.com/item/AForge.NET/114415?fr=aladdin 用途 调用笔记本电脑自带的相机 示例 源码 using ...

  7. switch 失效

    switch  开关失效无法切换,可以关闭,无法开启. 发现问题点 require-table.js 中toggle value的数据类型不是 number 导致 (value ? no : yes ...

  8. squid的处理request和reply的流程

    request处理: Breakpoint , SQUID_MD5Final ( digest= { (gdb) bt # SQUID_MD5Final ( digest= # ) at store_ ...

  9. bash脚本计算某程序的进程数

    脚本里面有时候需要判断某个程序是否启动,以及有几个进程下面用nginx来做实例 显示所有的nignx进程 ps -ef|grep nginx |grep -v grep 其中grep -v grep表 ...

  10. HTTP缓存初识

    一.HTTP缓存 1.强制缓存 2.协商缓存 静态资源 动态资源 二.总结 参考: http://muchstudy.com/2016/08/18/HTTP%E7%BC%93%E5%AD%98%E8% ...