• 关于react实现类似vue keep-alive 的cache router的功能解决方案


    // 问题来源  
    
    众所周知react是单页面应用,在路由发生变化的时候,她所对应的页面或者组件会被卸载。当路由加载的时候,原页面所有的数据都会重新加载
    
    这在移动端的用户体验可能是一个重大灾难!
    
    比如列表滚动到第20页或者tab切换第三个tab 再去滚动列表进入详情页,当你返回的时候你原来的浏览记录被重新加载了,这个体验会是非常差。
    
    react官方暂时未找到类似于vue的keep-alive功能的api,网上差了一些开源的插件,有点不太敢使用,对于整个项目来讲,使用一个陌生的api来控制整个项目,实在有点冒险。 基于这个问题,我这边有个相对而言稍微优雅的解决方案如下
    1 缓存当前pageNo,或者tabNo,不一定要存储在redux当中,因为react是单页应用,你只需要加pageNo,tabNo定义在react页面组件之外即可,每次加载的时候,她只会重新加载react类,外部的数据不会重新加载。
    
    2 有人会提出,将列表数据存储在redux中,试想一下如果业务复杂,那该是多大的代码量。
    
    3 为此可以跟后端定义一些接口,比如我页面加载5页的数据,先缓存5这个页码,当返回重新加载的时候,可以直接全部拉取这5页的数据,并做相应的滚动,接下来滚动逻辑再按照分页逻辑去做。
    
    4 此方案不是最优解,在我这实现的时候,稍微提升了用户体验。大家如果有意见的话,大可提出。
    const pageNo = 0;
    const tabNo = 0
    const cacheId = null;
    
    
    
    export default class A extends React.Componet {
    
        constructor(props){
    
        }
    
        pageNo = pageNo
    
        tabNo = tabNo;
    
        componetDidMount() {
            if(pageNo > 0) {
                this.getData(pageNo,()=>{
                    swpier(cacheId)
                })
            }
        }
    
    
        onPageChange = (pageNo) => {
            pageNo = pageNo;
            this.pageNo = pageNo;
        }
    }
  • 相关阅读:
    Lover
    As long as you love me....
    JavaSE(4)
    JavaSE(2)
    大数据学习之JavaSE(1)
    LeetCode
    PCA和SVD的区别与联系理解
    阿里笔试题(3.23)——走迷宫
    Java单例设计模式的实现
    Maven配置及idea下创建Maven项目详细步骤
  • 原文地址:https://www.cnblogs.com/lisiyang/p/13262360.html
Copyright © 2020-2023  润新知