【问题记录】分页加载/上拉加载列表,删除某条数据

文章讨论了在分页加载列表时遇到的问题,即删除某条数据后可能导致后续数据丢失。提出了解决方案,即在删除后重新请求并替换数据,避免页面刷新,但可能丢失部分数据。作者认为这影响不大,建议根据实际需求调整加载策略。
摘要由CSDN通过智能技术生成

【问题记录】分页加载/上拉加载列表,删除某条数据

  • 举例

    库里有9条数据,每次分页加载3条数据. 正常加载如图所示.图1

  • 问题现象: 当加载到完第2页的时候,删除了第5条数据。再次下拉。 第三页的数据为 8、9. 这个时候发现 数据7 丢了,页面展示为 1、2、3、4、6、8、9 。
  • 解决方案

    删除第5条后,重新请求第二页数据,如果第三页数据已经加载出来、可以从现有list中删掉

  • 优点

    1、不需要重新刷新整页列表
    2、用户体验效果较好、视口所在位置不会变化、用户感知很小(数据是在新数据返回之后进行替换的,因此不会频繁造成页面重绘)

  • 缺点

    该页之后的数据会被刷丢。
    但是我认为这不是什么大问题,如果你需要,计算一下删除时页面加载到的总页数,然后轮询加载。

伪代码
const list = [];
const state = {
  replace: false,
  list: [],
  total: 0,
  pageIndex: 0,
  pageSize: 3
}
async function loadList() {
  const result = await request({
    pageIndex: ++state.pageIndex,
    pageSize: state.pageSize
  });
  state.total = result.total;
  if (state.replace) {
    // 删除页面中上一页之后的数据 与 新数据拼接
    const prevList = state.list.slice(0, state.pageIndex * state.pageSize);
    this.list = prevList.concat(result.data);
  } else {
    state.list.push(...result.data);
  }
}

async function delete(data, index) {
  // 删除数据
  await deleteRequest({id: data.id});
  // index 表示删除的第N条数据
  // 重置页数为当前删除数据所在位置的上一页
  state.pageIndex = Math.floor(index / state.pageSize);
  // 重新请求该页数据
  state.replace = true;
  await loadList();
  // 替换完成
  state.replace = false;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值