• react中界面跳转 A界面跳B界面,返回A界面,A界面状态保持不变 localStorage方法


    好像所有的单页面应用都会有个问题,就是我A作为一级界面,跳转到二级界面B的时候,在回到A界面,你会发现所有的参数都重新加载了

    很多时候假如我们的界面有很多条新闻列表,通过设置参数筛选出了一部分的新闻列表,这个时候我点击新闻标题进入了新闻详情,然后返回

    到A界面的时候,发现所有的条件都重置了,这样用户体验很显然是非常不好的。

    我还是个小菜鸟所以对于那种大佬们说可以使用redux可以实现的方法不是很明白,所以我就介绍下另外一种方法

    在跳转到B界面的时候,把你想要保留的数据啊参数啊,传递给B界面,在B界面里面使用localStorage进行保存,然后回到A界面的时候,可以判断下localStorage是不是存在,存在直接使用该数据该参数,否则就按原有的来。

    A界面

    componentDidMount() {
            backTop();
            let localTemp = JSON.parse(localStorage.getItem('hotTemp'));
    
            if (localTemp === undefined || localTemp === null) { //这边是判断是不是从B回来的,如果不是,就初始化请求
                let params = {
                    page: 1,
                    size: 20
                }
                this.getHotEvent(params);
            } else {  //如果是从B回来的,那么就把条件啊,数据啊,直接给state进行显示就可以了
                this.setState({
                    pageNum: localTemp.pageNum,
                    hotEvent:localTemp.hotEvent,
                    success:localTemp.success,
                    total:localTemp.total
                })
                if (localTemp.sflag) { //我这边是做了个是不是填写了筛选条件的判断   如果填写了筛选条件回到A界面的时候,这些筛选条件要显示出来
                    this.setState({
                        defaultInput: localTemp.defaultInput,
                        startTime: localTemp.startTime,
                        endTime: localTemp.endTime,
    
                    })
                    //this.getIeahotsSearch(localTemp.searchParam);
                } else { //这边是没有任何筛选条件,只要数据显示就可以了
    
                    //this.getHotEvent(localTemp.params);
                }
            }
    
        }
    
    
    
    <Link className="recall left transition3"
    to={{
         pathname: "/B",
          state: {eventArray: item, localState: this.state},  //这边是我想要保留的数据,通过state传给B 
    }}
    >{item.title}</Link>

    B界面

      componentDidMount() {
         
           /*保存A界面列表的参数*/
            if(this.props.location.state.localState!==undefined&&this.props.location.state.localState!==null){
                localStorage.setItem("hotTemp", JSON.stringify(this.props.location.state.localState));
                //console.log(localStorage.getItem('hotTemp'));
            }
    
           
        }

    这样就可以了

    注:一定要在其他的界面清除这个localStorage

  • 相关阅读:
    单例模式
    抽象类的作用和应用场景
    java内部类的作用
    java多线程
    IO流--与properties集合配合使用
    IO流--序列化流与反序列化流
    8 个必备的PHP功能开发
    CSS3 box-shadow:
    移动平台的meta标签-----神奇的功效
    Android Screen Monitor抓取真机屏幕
  • 原文地址:https://www.cnblogs.com/yesu/p/10973743.html
Copyright © 2020-2023  润新知