# 小程序列表下拉刷新后数据重复出现该按什么顺序核对

- Link: https://www.itor.cn/1266.html
- Published: 2026-11-07T03:39:38+08:00
- Author: it

小程序列表下拉刷新后出现同一条内容重复两遍甚至三遍，是不少项目上线后容易遇到的反馈。
多数人的第一反应是接口出了问题，但实际排查时，接口返回的数据往往正常，真正的原因
通常藏在客户端的分页状态、请求时序或数据合并方式里。这类问题本身不算复杂，但如果
不按顺序查，很容易在错误的方向上反复改代码。下面按四个层次梳理一套核对顺序。

一、先看分页参数是否在刷新时被重置

列表页一般会维护页码、偏移量、每页条数这几个变量。下拉刷新如果只触发了请求，却没有
把页码归零，第二次刷新就会带着上一次的页码去拉数据，服务端返回的自然是后面几页的
内容，和已有列表拼在一起就显得重复。核对方法是把刷新前后的请求参数打印出来对照：
刷新前页码是多少，刷新后第一次请求的页码是否回到起始值，每页条数有没有被意外改写。
偏移量分页同理，刷新时偏移量应归零。这一步用日志或调试工具就能确认，成本最低，应
放在最前面。

二、再看请求时序是否互相干扰

用户快速连续下拉时，可能同时发出多个刷新请求。如果这些请求并发返回，先发的后到、
后发的先到，回调里各自往列表写数据，就会出现叠加。处理思路有三种：加请求锁，刷新
进行中不接受新的刷新触发；发起新请求时取消上一次未完成的请求；给每个请求打上时间
戳或序列号，回调时只接受最新一次请求的结果，过期响应直接丢弃。三种方式可以组合使用，
核心是保证同一时刻只有一个刷新结果真正写入列表。

三、接着看数据合并逻辑是否区分了刷新与加载更多

刷新和加载更多是两个语义不同的动作，写法必须区分开。刷新应当清空当前列表再写入新
数据，加载更多才是在末尾追加。常见错误是把两者写成同一个追加函数，刷新时旧数据没
清掉，新数据接在后面，重复就出现了。另外，即使逻辑正确，也建议在写入前按唯一标识
去重，比如以数据id为键做一次过滤，作为兜底。去重时要注意唯一标识必须真正唯一，不能
用标题、名称这类可能重复的字段。

四、最后看服务端返回是否稳定排序

确认接口是否稳定排序，同一批数据多次请求的顺序是否一致。如果排序字段本身有大量重复
值，比如按创建时间排序而多条记录时间相同，分页边界处就容易出现同一条记录在两页里
都出现，或者被跳过。建议在排序字段之后追加一个唯一键作为次级排序，让顺序完全确定。
同时检查返回数据里是否存在重复记录，排除数据源本身的问题。

把以上四步整理成排查顺序：分页参数、请求时序、合并逻辑、服务端排序。修复后不要只看
一次刷新是否正常，要用连续快速下拉、弱网环境、刷新与加载更多交替触发、切换分类再
返回等场景做回归验证。it数运在小程序开发中处理这类列表问题时，也遵循先状态后时序、
先客户端后服务端的顺序，把每个环节的边界确认清楚，重复数据这类现象基本都能定位到
具体原因。
