收藏
回答

微信小程序列表频繁触发onPullDownRefresh,onReachBottom数据错位怎么办?

已经加了状态判断字段判断数据是否完成,但是还是会出现先执行上拉刷新后下拉刷,上拉数据的数后出现在了前面

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

2 个回答

  • 耿霄
    耿霄
    2021-04-11

    我们可以通过条件在onPullDownRefresh,onReachBottom内判断是否执行,如果不执行,直接return 即可

    2021-04-11
    有用
    回复
  • 鲤子
    鲤子
    2021-04-11

    建议上图上代码上片段

    2021-04-11
    有用
    回复 2
    • 浩宇
      浩宇
      2021-04-11
      /**
         * 页面相关事件处理函数--监听用户下拉动作
         */
        onPullDownRefresh: function () {
          var that = this;
          if (that.data.loadingHidden) {
            that.setData({
              topicArr: [],
              loadingHidden: false
            })
            this._getTopics(() => {
              //是否加载完全
              that.setData({
                isLoadedAll: false,
                pageIndex: 1,
                loadingHidden: true
              });
              wx.stopPullDownRefresh();
            });
          } else {
            wx.stopPullDownRefresh();
          }
        },
        /**
         * 页面上拉触底事件的处理函数
         */
        onReachBottom: function () {
          var that = this;
          //console.log(that.data.loadingHidden);
          if (that.data.loadingHidden && !that.data.isLoadedAll) {
            this.setData({
              loadingHidden: false,
              pageIndex: that.data.pageIndex + 1
            })
            this._getTopics(() => {
              this.setData({
                loadingHidden: true
              })
            });
          }
        },
        /**
         * 用户点击右上角分享
         */
        onShareAppMessage: function () {
        },
        /*显示话题的具体信息*/
        showTopicDetailInfo: function (event) {
          var id = topic.getDataSet(event, 'id');
          wx.navigateTo({
            url: '/pages/topic/details?id=' + id
          });
        },
        _loadData: function () {
          this._getTopics();
        },
        _getTopics: function (callback) {
          var that = this;
          topic.getTopics({ PageIndex: this.data.pageIndex }, (res) => {
            var data = res.data;
            //console.log(res);
            if (data.length > 0) {
              that.data.topicArr.push.apply(that.data.topicArr, res.data); //数组合并
              that.setData({
                topicArr: that.data.topicArr
              });
            } else {
              //已经全部加载完毕
              that.setData({
                isLoadedAll: true,
                pageIndex: 1
              });
              wx.showToast({
                title: '数据到底了',
                icon: 'none',
                duration: 1000
              })
            }
            callback && callback();
          }, callback);
        }
      })
      2021-04-11
      回复
    • 鲤子
      鲤子
      2021-04-11回复浩宇
      条件表达式不严谨,加载与刷新不应同时可以触发,用个字段来表示当前在请求的状态,另外可以试试不用push来处理数组看下数据会不会跑到前面。
      2021-04-11
      回复
登录 后发表内容
问题标签