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 ...
随机推荐
- 字符串处理工具StringUtils
package yqw.java.util; import java.io.File;import java.text.ParseException;import java.text.SimpleDa ...
- Updatexml函数再mysql中的作用
函数的解释 http://www.blogjava.net/chenpengyi/archive/2006/07/11/57578.html 我的理解就是updatexml函数具有查询功能 并且会再x ...
- Json-lib 的学习笔记
json 按照我的理解来说,就是一个字串表,可以用来表示对象的字符串,也可以用来表示数组.它比 xml 文件节省了很多标签的内容. 关于什么是 json,在这里我们就不过多介绍了. Json-lib ...
- ClientScriptManager.RegisterClientScriptBlock Method 无效
ClientScriptManager.RegisterClientScriptBlock Method 这个方法不能在Render方法里面使用,但是可以在PreRender中使用 最好是放到OnLo ...
- Array Stack Implement using C
- ssd写入量剩余读写次数怎么查
固态硬盘ssd写入量剩余读写次数怎么查 为什么要查固态硬盘的写入量呢,主要是因为闪存是有写入次数限制的,所以查次数就是看看寿命还有多少,说白了这是对耐久度的一点担忧.其实目前原厂出品的固态硬盘,即便是 ...
- [VBA]删除多余工作表
sub 删除多余工作表() Dim i As Integer Application.DisplayAlerts = False For i = Worksheets.Count To 1 step ...
- Vue知识整理11:列表渲染(v-for来实现)
简单的v-for结构显示迭代数据 通过value别名 显示下面各个属性值 通过index 和key获取同类数组索引,或者不同属性的key属性名
- spring boot加载自定义配置
1.通过@Value 配置文件中 wechat: ssh: host: 192.0.1.1 port: 22 加载类 @Component @Data public class SftpConfig ...
- Jmeter接口测试系列之测试用例编写和调用
在使用Jmeter进行接口测试时,首先需要根据接口定义,编写响应的接口测试用例,在编写接口测试用例时,我们根据测试的侧重点不同,使用不同的方式编译测试用例. 一种是:整个请求参数作为一个变量,进行测试 ...