(Vuejs)添加喜欢和删除喜欢不起作用



like切换不正常

addLike: (state, like) => {
let posts = state.posts;
for (let i = 0; i < posts.length; i++) {
if (posts[i]._id == like.post) {
if (posts[i].likes.findIndex((el) => el._id === like._id) === -1) {
posts[i].likes.push(like);
}
}
}
},
removeLike: (state, like) => {
let posts = state.posts;

for (let i = 0; i < posts.length; i++) {
if (posts[i]._id == like.post) {
if (posts[i].likes.findIndex((el) => el._id === like._id) === -1) {
posts[i].likes.splice(posts[i].likes.indexOf(like), 1);

}
}
}
}

如果没有问题中的复制,很难说问题是什么,但我看到removeLike()中的一些问题:

  • if条件检查like是否存在(未找到findIndex返回-1):

    if (posts[i].likes.findIndex((el) => el._id === like._id) === -1) {
    ^^^^^^
    

    但应该是相反的:

    if (posts[i].likes.findIndex((el) => el._id === like._id) >= 0) {
    
  • like是一个对象,因此indexOf(like)将始终返回-1,而splice(-1, 1)将删除数组的最后一项,如果预期的like实际上不是最后一项,这可能是意外的:

    posts[i].likes.splice(posts[i].likes.indexOf(like), 1);
    ^^^^
    

    要修复这个错误,缓存findIndex的索引,并在随后的splice中使用它:

    const likeIndex = posts[i].likes.findIndex((el) => el._id === like._id) 
    if (likeIndex >= 0) {
    posts[i].likes.splice(likeIndex, 1);
    }
    

假设like只属于单个post,addLike()removeLike()中的for-循环在相关post被修改后应该是break:

for (let i = 0; i < posts.length; i++) {
if (posts[i]._id == like.post) {
// add or remove like...
break;
}
}

最新更新