uni-app z-paging下拉刷新、上拉加载如何更新列表中的子数据 给列表中的某一项子数据列表添加数据 会导致子列表数据的顺序发生错乱

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app z-paging下拉刷新、上拉加载如何更新列表中的子数据 给列表中的某一项子数据列表添加数据 会导致子列表数据的顺序发生错乱

场景:评论列表,一级评论列表下有二级评论,初始只展示一条二级评论,点击“展开更多回复”按钮,加载后面的二级评论。
异常:当点击二次以上“展开更多回复”按钮后,二级评论的顺序会发生错乱。

图片
图片

2024-12-23 15:55


1 回复

在处理 uni-app 中的 z-paging 组件时,实现下拉刷新和上拉加载,同时确保在更新列表中某一项的子数据时不会打乱子列表的顺序,可以通过以下方式实现。以下是一个示例代码,展示了如何在 uni-app 中使用 z-paging 组件,并安全地更新列表中的子数据。

示例代码

首先,确保你已经安装并配置了 z-paging 组件。

1. 安装 z-paging 组件

如果还未安装,可以通过 npm 安装:

npm install @dcloudio/uni-ui

2. 引入并使用 z-paging 组件

在你的页面或组件中引入并使用 z-paging

<template>
  <view>
    <z-paging
      :page-data="pageData"
      @on-refresh="onRefresh"
      @on-load="onLoadMore"
    >
      <view v-for="(item, index) in pageData.list" :key="item.id">
        <view>{{ item.name }}</view>
        <view v-for="(subItem, subIndex) in item.subList" :key="subItem.id">
          {{ subItem.name }}
        </view>
        <button @click="addSubItem(index)">Add SubItem</button>
      </view>
    </z-paging>
  </view>
</template>

<script>
import ZPaging from '@dcloudio/uni-ui/lib/uni-ui/z-paging/z-paging.vue';

export default {
  components: {
    ZPaging
  },
  data() {
    return {
      pageData: {
        list: [],
        page: 1,
        pageCount: 0,
        hasMore: true
      }
    };
  },
  methods: {
    onRefresh() {
      this.pageData.page = 1;
      this.fetchData();
    },
    onLoadMore() {
      this.pageData.page++;
      this.fetchData();
    },
    fetchData() {
      // 模拟数据请求
      setTimeout(() => {
        const newData = [
          // 模拟数据
        ];
        if (this.pageData.page === 1) {
          this.pageData.list = newData;
        } else {
          this.pageData.list = this.pageData.list.concat(newData);
        }
        this.pageData.hasMore = newData.length > 0;
      }, 1000);
    },
    addSubItem(parentIndex) {
      // 安全地添加子项
      const newSubItem = { id: Date.now(), name: 'New SubItem' };
      this.$set(this.pageData.list[parentIndex].subList, this.pageData.list[parentIndex].subList.length, newSubItem);
    }
  }
};
</script>

解释

  1. 下拉刷新和上拉加载:通过 onRefreshonLoadMore 方法处理下拉刷新和上拉加载逻辑。
  2. 更新子数据:使用 Vue.set(或 this.$set)来确保在更新列表中的某一项子数据时,Vue 能够检测到变化并正确更新 DOM,而不会打乱子列表的顺序。

这种方式可以确保在 uni-app 中使用 z-paging 组件时,列表数据的更新是安全和可靠的。

回到顶部