getNextPageParam: last => last.hasMore ? last.nextCursor : undefined, select: data => Array.from( new Map(data.pages.flat().map(i => [i.id, i])).values() ),
上拉加载到第 3 页,列表出现 20 条重复记录,同一 id 出现两次。翻到第 6 页时总数比后台多 43 条。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:getNextPageParam 返回的是当前页码,接口分页从 0 开始,第二页请求又拿了一次第 1 页。合并时直接 concat,没有按 id 去重。
围绕「无限滚动分页合并」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。监控和日志的时间要对上,时区不一致会多绕很大一圈。
临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
处理上按这个顺序:先确认接口页码从 0 还是 1 开始;getNextPageParam 用 lastPage.nextCursor 而不是自己加一;合并时按唯一 id 去重 保留后到的字段;从第一页连续翻到第六页 核对总条数。
确认没问题再收工,连翻六页没有重复 id,列表总数与后台 count 完全一致。
