在 activity/notification 的 reaction/reaction-received 页面中存在一个错误。
当用户尝试向下滚动并加载下一页时,列表会重复添加相同的条目,导致重复。
该问题源于前端和后端之间存在不一致。前端中定义的 id 是 post_id,而后端要求的是 reaction_id。
一个草稿的拉取请求(PR)在这里,方便时请进行审查。
在 activity/notification 的 reaction/reaction-received 页面中存在一个错误。
当用户尝试向下滚动并加载下一页时,列表会重复添加相同的条目,导致重复。
该问题源于前端和后端之间存在不一致。前端中定义的 id 是 post_id,而后端要求的是 reaction_id。
一个草稿的拉取请求(PR)在这里,方便时请进行审查。
感谢您的草稿拉取请求(PR),反应(reactions)的分页现在确实看起来不准确并且似乎有重复。
我不确定正确的修复方法是否是设置 post_id。看起来分页使用了 before_reaction_user_id(参见此处)。甚至可能删除第 27 行(PR 中的那一行)会有帮助,因为它很可能在上面扁平化的 reaction 中已经设置了。
感谢您的回复。
我明天会检查一下,看看是否能解决这个问题。
好的,谢谢!
为了清楚起见,我认为 before_reaction_user_id 应该是来自 discourse_reactions_reaction_users 的 ID——我认为这个变量名有点令人困惑。请随时在此处或在聊天中澄清任何问题。
我已经调查并找到了 rspec 失败的原因。
原始的 spec 断言了一个带有属性 expect(page).to have_css(\".user-stream-item [data-post-id='#{post_1.id}']\") 的组件。
然而,在最近的提交中,#{post_1.id} 被更改为 reaction_user_id,这导致了不匹配,从而导致了失败。
最初的想法是更改 id 以满足 API 的需求,但我忽略了 id 也在 PostList 中用作 post_id 的事实,如下所示:
<PostList
@posts={{@model}}
@fetchMorePosts={{@controller.loadMore}}
@emptyText={{i18n "notifications.empty"}}
@additionalItemClasses="user-stream-item"
@showUserInfo={{false}}
class="user-stream"
>
并且其中使用的 id 在 post.gjs 组件中进行了映射
data-post-id={{@post.id}}
data-topic-id={{@post.topicId}}
data-user-id={{@post.user_id}}
因此,原始的 id 行为不应被更改,因为这可能会导致 postList 中出现严重的失配,这直接导致了昨天 rspec 的失败。
作为一种变通方法,可能还有另一种解决此问题的方法:
在 flattenForPostList 时添加一个新的字段 reaction_user_id: reaction.id,然后将 #getLastIdFrom(array) 函数中的 return array.length ? array[array.length - 1].id : null; 更改为 return array.length ? array[array.length - 1].reaction_user_id。
简而言之;
reaction_id、post_id 和现在的 reaction_user_id 是完全不同的,但 postList 组件需要的 id 必须是 post_id。而获取下一页所需的 id 应该是 reaction_user_id,这非常令人困惑。
感谢 @small-lovely-cat 的调查和拉取请求 ![]()
我已向拉取请求添加了一个规范,并会将其合并。
此主题已在 19 小时后自动关闭。不再允许回复。