程序背景:主界面是一个可下拉无限加载的列表,辅助页面是对列表项做操作。
需求:在辅助页面删除数据后,回到主界面,主界面同时删除数据。
问题:当我删除了某条数据后再次去请求数据(下一页),这时后因为服务器文件少了一条,假如和正常一样发送请求( page * pageSize ),会少一条,怎么解决?
1
zhuowenli 2020-04-25 18:40:49 +08:00 via Android 3
不要使用页码发请求,可以通过列表的最后一条数据的 id 作为请求参数。
|
2
maichael 2020-04-25 19:08:05 +08:00
不重新获取数据,直接手动把删除的数据标记,根据数据显示该条数据
|
5
ariussssss37 2020-04-26 00:05:54 +08:00
带 offset 条数请求,用 id 标志 去 diff
|
6
rick2c 2020-04-26 09:17:03 +08:00
能不能删除以后进行数据刷新
|
7
l1nyanm1ng 2020-04-26 09:25:23 +08:00
最近我也同样遇到这种场景了,mark 一下,我暂时也还没解决
|
8
chengxy OP @ariussssss37 #5 看来还是要和后端商量了。
|
11
LeeSeoung 2020-04-26 10:02:43 +08:00
数据总条数有变更直接刷新表格回第一页
|
12
bzj 2020-04-26 10:09:28 +08:00
一次性全部加载放到缓存中,从缓存取数据。
|
13
o0 2020-04-26 10:14:57 +08:00
一般都是刷新一下数据,不过上面的思路都很好。
|
14
lihongming 2020-04-26 11:05:55 +08:00 via iPhone
通过最后一条数据的 id 请求下一个数据+1
现在有的数据库(比如 AWS 的 DynamoDB )根本不支持 offset 了,只能通过最后一条 id 。 即使你用 MySQL 之类的支持 offset 的数据库,用 id>也比 offset 效率高很多,数据量小看不出来,你可以试试一亿条数据 offset1000 万,估计数据库直接挂了 |
15
chengxy OP @rick2c #10 我了解你的意思了,指的是把当前页的数据从数组中移除,然后请求当前页数据,重新添加回数组。
是这样吗? |
16
chengxy OP @rick2c #10 这样有个问题,假如数组里已经有 5 页数据,每页 10 条,我删除了第 2 页的第 5 条,那这样返回的时候就要重新请求 4 页的数据了。
|
17
rick2c 2020-04-26 11:49:11 +08:00
@chengxy 是这样的,你的原问题是`再次去请求数据(下一页)`时出现少一条数据,这种情况刷新当前页面数据是必须的,如果你是已经做了数据缓存`假如数组里已经有 5 页数据`,这种情况当然不需要做数据刷新,直接数据重组就行了
|
19
yeqizhang 2020-04-26 12:37:43 +08:00 via Android
如果是用户看的页面,
倒序查询,后台添加数据,也会有问题。 一般传最新加载的数据的最后一行的 id create_date 都好像也可以。 |
20
dreasky 2020-04-26 12:43:13 +08:00
参考 twitter 的 api 设计, 使用 since_id 和 max_id 来获取范围内的 list
|
21
zpfhbyx 2020-04-26 12:50:02 +08:00
|
22
lazy21 2020-04-26 13:38:24 +08:00
使用发布订阅模式,辅助页面发布一个事件,列表监听同一个事件
|
23
wildnode 2020-04-26 13:55:23 +08:00
@chengxy 我们之前的一种做法是,不删除主页面的数据,通过 dispatch 一个事件将主页面中的那条数据标记为已删除,然后通过 UI 的方式告知用户这条被删掉了,不可操作。不知道你们能这样搞不。。
|
24
Yourshell 2020-04-26 14:02:28 +08:00
可以看一下 service worker
|
25
uchihaObito 2020-04-26 15:03:40 +08:00
是不是可以这样,声明一个 deleteCount,每次有删除的时候 deleteCount+1,然后请求下一条分页的时候 offset 传本来应该传的 offset-deleteCount,请求成功后 deleteCount 重新置 0
|
26
hoythan 2020-04-26 15:06:54 +08:00
后端改个毛,非常合理的设计,删除的时候你应该前端标记它让他不显示而已,页码还是正常的加载。
上拉刷新或者刷新的时候再取消标记 |
27
hoythan 2020-04-26 15:12:38 +08:00
记得防止无限滚动的时候占位别丢了就行。
|
28
VWMMWV 2020-04-26 15:19:22 +08:00
之前的做法都是返回后加载第一页的数据,看完你们的思路,觉得很好,就是不知道后端愿不愿意改
|
29
zhuojiu 2020-04-26 15:31:40 +08:00
状态删除不就行了吗?
|
30
uchihaObito 2020-04-26 15:56:25 +08:00
@zhuowenli 如果筛选条件的分页是不是就不能用 id 了
|
32
luoruiqing 2020-04-26 18:02:00 +08:00
置灰~
|
33
zhuowenli 2020-04-26 20:56:51 +08:00 via Android
@uchihaObito 是的,只适合流式分页
|