好像全部的单页面应用都会有个问题,就是我A做为一级界面,跳转到二级界面B的时候,在回到A界面,你会发现全部的参数都从新加载了redux
不少时候假如咱们的界面有不少条新闻列表,经过设置参数筛选出了一部分的新闻列表,这个时候我点击新闻标题进入了新闻详情,而后返回this
到A界面的时候,发现全部的条件都重置了,这样用户体验很显然是很是很差的。spa
我仍是个小菜鸟因此对于那种大佬们说可使用redux能够实现的方法不是很明白,因此我就介绍下另一种方法code
在跳转到B界面的时候,把你想要保留的数据啊参数啊,传递给B界面,在B界面里面使用localStorage进行保存,而后回到A界面的时候,能够判断下localStorage是否是存在,存在直接使用该数据该参数,不然就按原有的来。component
A界面blog
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界面get
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')); } }
这样就能够了string
注:必定要在其余的界面清除这个localStorageit