收藏
回答

小程序列表切换较快,不同列表数据重复加载,这个问题怎么解决?


//快速切换头部,列表2的数据,可能会追加到列表1中,列表1的数据没来的及清空。

//头部切换
  onNavBar(e) {
    let navIndex = e.detail.setIndex;
    this.setData({ navIndex, showScreen: false, page: 1, list: [], hasMore: null });
    this.getOrderList();
  },
 
 
//查询用工单审批列表
  getOrderList() {
    let reqData = {};
    let lock = this.data.lock;
    if (lock) {
      return;
    }
    reqData.page = this.data.page;
    reqData.status = this.data.navIndex;
    if (this.data.cdIds) {
      reqData.cdIds = this.data.cdIds;
    }
 
    this.setData({ pageState: 'frame', lock: true })
    orderModel.getList(reqData).then(res => {
      const tempArray = this.data.list.concat(res.resultData.records);
      const dataState = tempArray.length > 0 ? 'finish' : 'empty';
 
      this.setData({
        lock: false,
        list: tempArray,
        pageState: dataState,
        hasMore: res.hasMore
      })
 
    }).catch(err => {
      this.setData({ pageState: 'error', lock: false })
    })
  },


回答关注问题邀请回答
收藏

7 个回答

  • 张生
    张生
    2019-12-10

    每setdata一次,调一次


    wx.showLoading({

     title: '加载中',

        mask:true

    })了解一下。


    2019-12-10
    赞同
    回复 3
    • 🔬King🍭dong🔭
      🔬King🍭dong🔭
      2019-12-10
      骨架屏我都用上了,这个跟问题无关
      2019-12-10
      回复
    • 张生
      张生
      2019-12-10
      我觉得什么骨架屏这些,得看你放的地方啊,你从函数一进来就把屏给黑了,还能有快速操作,影响你的数据?
      2019-12-10
      回复
    • 张生
      张生
      2019-12-10
      这样不行?我就不太信了。
      getOrderList() {
      wx.showLoading({


        title: '加载中',


          mask:true


      })

          let reqData = {};.....
      2019-12-10
      回复
  • 黯伢
    黯伢
    2019-12-09

    给getOrderList加一个参数,如果切换了tab就就const tempArray =res.resultData.records;没切换tab就const tempArray =this.data.list.concat(res.resultData.records);

    2019-12-09
    赞同
    回复 1
    • 🔬King🍭dong🔭
      🔬King🍭dong🔭
      2019-12-09
      多谢,这个操作可以试试
      2019-12-09
      回复
  • CCCCCCr-
    CCCCCCr-
    2019-12-09

    setData完在去请求列表, setData的回调函数 了解一下


    2019-12-09
    赞同
    回复 2
    • 🔬King🍭dong🔭
      🔬King🍭dong🔭
      2019-12-09
      这种回调也试过,不能解决问题
      2019-12-09
      回复
    • CCCCCCr-
      CCCCCCr-
      2019-12-09回复🔬King🍭dong🔭
      你setData完之后,列表就清空了,这个时候在去请求就不会出现数据来不及清空了
      2019-12-09
      回复
  • 子不语
    子不语
    2019-12-09

    恕我愚钝,你这加载的list有区别吗?

    2019-12-09
    赞同
    回复 3
    • 🔬King🍭dong🔭
      🔬King🍭dong🔭
      2019-12-09
      切换的时候,拿到的下标就是订单状态值,然后调用的不同接口,list肯定不同
      2019-12-09
      回复
    • 🔬King🍭dong🔭
      🔬King🍭dong🔭
      2019-12-09
      我懂你意思了,你说的是wxml中列表没有区别,但是遇到列表长得不一样,或者列表组件用到卡槽等不同操作,还是得这么写
      2019-12-09
      回复
    • 子不语
      子不语
      2019-12-09回复🔬King🍭dong🔭
      你搞一个代码片段上来看看
      2019-12-09
      回复
  • 罗梅光
    罗梅光
    2019-12-09

    使用wx:if试试

    2019-12-09
    赞同
    回复 2
    • 🔬King🍭dong🔭
      🔬King🍭dong🔭
      2019-12-09
      wx:if一样
      2019-12-09
      回复
    • 🔬King🍭dong🔭
      🔬King🍭dong🔭
      2019-12-09
      针对于平凡切换的来表wx:if太消耗性能,一般不用
      2019-12-09
      回复
  • 拾忆
    拾忆
    2019-12-09

    不能把list分开么?

    2019-12-09
    赞同
    回复 1
    • 🔬King🍭dong🔭
      🔬King🍭dong🔭
      2019-12-09
      试过分开,给三个数组,但还是会出现重复加载,应该是快速切换list没有制空就开始调接口导致的
      2019-12-09
      回复
  • 🔬King🍭dong🔭
    🔬King🍭dong🔭
    2019-12-09

    是不是onNavBar中this.setData({list:[]})之后加个if判断,判断list为空后再调用就好了

    2019-12-09
    赞同
    回复
登录 后发表内容
问题标签