react 从商品详情页返回到商品列表页,列表自动滚动上次浏览的位置
现状:目前从商品详情页返回到商品列表页,还需要再去请求服务数据,还需要用户再去等待获取数据的过程,这样用户体验非常不好,
遇到的问题:
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 从商品详情页返回到商品列表页,列表自动滚动上次浏览的位置的更多相关文章
- 自己定义ViewGroup实现仿淘宝的商品详情页
近期公司在新版本号上有一个须要. 要在首页加入一个滑动效果, 详细就是仿照X宝的商品详情页, 拉到页面底部时有一个粘滞效果, 例如以下图 X东的商品详情页,假设用户继续向上拉的话就进入商品图文描写叙述 ...
- 在ecshop商品详情页显示供货商
好久没写文章了,隐约记得前几天有人问到这个问题:[如何在ecshop商品详情页面显示该商品的供货商?] 今天有时间整理下,分享给大家. 注:以下修改适用于ecshop2.7.2,其他版本未做测试. 1 ...
- 第04项目:淘淘商城(SpringMVC+Spring+Mybatis)【第九天】(商品详情页面实现)
https://pan.baidu.com/s/1bptYGAb#list/path=%2F&parentPath=%2Fsharelink389619878-229862621083040 ...
- 微信小程序电商实战-商品详情(上)
先看一下今天要实现的小程序商品详情页吧! 商品详情.gif 本期我们要实现小程序商品详情页的头部标题.头部轮播.商品详情浮动按钮和商品内页布局. 一.设置头部标题 如上图所示,头部标题是商品详情 ...
- python3 - 商品管理的程序,商品信息都存在一个json串里面
商品管理的程序,商品信息都存在一个json串里面 1.查询商品信息 #校验商品是否存在 2.新增商品 # #校验商品是否存在 #校验价格是否合法 3.修改商品信息 ##校验商品是否存在 if chic ...
- 商品详情页系统的Servlet3异步化实践
http://jinnianshilongnian.iteye.com/blog/2245925 博客分类: 架构 在京东工作的这一年多时间里,我在整个商品详情页系统(后端数据源)及商品详情页统一 ...
- Android跳转淘宝、京东APP商品详情页
import Android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; imp ...
- 高并发 Nginx+Lua OpenResty系列(10)——商品详情页
本章以京东商品详情页为例,京东商品详情页虽然仅是单个页面,但是其数据聚合源是非常多的,除了一些实时性要求比较高的如价格.库存.服务支持等通过AJAX异步加载加载之外,其他的数据都是在后端做数据聚合然后 ...
- Ecshop商品详情页显示当前会员等级价格
会员登录状态下,在ECSHOP商品详情页的本店售价中显示当前登录会员对应的等级价格,在未登录状态下,则还默认显示原来的本店售价. 解决方法: 这个需要修改ECSHOP程序代码来实现. 打开文件 /in ...
随机推荐
- 关于TCP/IP,必须知道的十个知识点(转)
三次握手四次挥手可参考:http三次握手,四次挥手 本文整理了一些TCP/IP协议簇中需要必知必会的十大问题,既是面试高频问题,又是程序员必备基础素养. 一.TCP/IP模型 TCP/IP协议模型(T ...
- 网络对抗技术 20165220 Exp7 网络欺诈防范
网络对抗技术 20165220 Exp7 网络欺诈防范 实验任务 (1)简单应用SET工具建立冒名网站 (1分) (2)ettercap DNS spoof (1分) (3)结合应用两种技术,用DNS ...
- WPF C# 创建缩略图
不太精确的方法: public bool ThumbnailCallback() { return false; } private void CreateThumb(int toWidth) { S ...
- JavaScript对象---递归遍历对象
JavaScript 中的所有事物都是对象:字符串.数值.数组.函数... 此外,JavaScript 允许自定义对象. JavaScript 对象 JavaScript 提供多个内建对象,比如 St ...
- 【mysql】查询最新的10条记录
实现查询最新10条数据方法: select * from 表名 order by id(主键) desc limit 10 参考文档: MySQL查询后10条数据并顺序输出
- log() exp()函数
1 对数函数表示法 import numpy as np import math print('输出自然底数e:',math.e) # np表示法 # np.log()是以e为底的自然对数 print ...
- .Net 逆向 Reflector之reflexil使用
网上下载了一款商用的教育培训类软件,是用.Net写的,标榜的是免费的,但是只能试用一个月,商家很精明,用此方法推广招揽客户,但是公司在这一块却没有预算购买,一开始就想着既然是商用软件,安全机制做的肯定 ...
- RESR API (三)之Views
Class-based Views Django's class-based views are a welcome departure from the old-style views. - Rei ...
- [LeetCode] 272. Closest Binary Search Tree Value II 最近的二叉搜索树的值 II
Given a non-empty binary search tree and a target value, find k values in the BST that are closest t ...
- springmvc中获取request对象,加载biz(service)的方法
获取request对象: 首先配置web.xml文件--> <listener> <listener-class> org.springframework.web.con ...