繁花如伊
没人答自己写了一个。。。代码如下 // 下拉刷新请求 request(callback) { // 区分首次加载和之后加载,首屏加载会有加载组件,回退定位等 if (this.isFirstLoaded) { // 从localStorage中获取上次加载页数 let initPage = localStorage.getItem(LS_KEY.goodsPage) ? parseInt(localStorage.getItem(LS_KEY.goodsPage), 10) : 1; localStorage.removeItem(LS_KEY.goodsPage); // 扩大初始加载个数 this.baseNum = initPage * LOAD_SIZE; Spinner.show(); this.initRequest([], initPage, callback); } else { this.loadGoodsData(callback); } return; } // 加载首屏数据,用于回退定位 loadInitData() { this.goodsPage++; this.goodsInfo.goodsModel.params = { favorite_update_time: this.goodsInfo.updateTime, page: this.goodsPage, size: LOAD_SIZE }; return this.goodsInfo.goodsModel.get(); } // 一个递归请求,可加载多页数据,用于带回退定位的首次加载数据 initRequest(target = [], stopPage = 1, callback) { this.loadInitData() .then(data => { target = target.concat(data.goodsList); this.handleResponse(data); if (stopPage === 0) { callback && callback(target); this.isFirstLoaded = false; Spinner.hide(); return; } stopPage--; this.initRequest(target, stopPage, callback); }); } // 对每次的数据请求进行处理 handleResponse(data) { let goods = this.itemsStore; let newLoadList = data.goodsList; if (newLoadList.length === 0) { this.isFirstLoaded && this.props.showNoGoods(); this.goodsPage--; } this.goodsInfo.updateTime = data.updateTime; this.updateLocalStorage({ goodsList: goods.concat(newLoadList), updateTime: data.updateTime }); }