乐观更新后数据不一致怎么办?
我在做点赞功能时用了乐观更新,先本地改状态再发请求,但网络失败后回滚老出问题。
比如用户点完赞,UI立刻变成已点赞,结果请求失败了,我试着用 try/catch 回滚,但有时候状态还是对不上,是不是哪里逻辑漏了?
这是我的简化代码:
const handleLike = async () => {
const prevLiked = liked;
setLiked(true); // 乐观更新
try {
await api.likePost(postId);
} catch (error) {
setLiked(prevLiked); // 回滚
alert('点赞失败');
}
};
试试看这段代码:
注意这里加了一个
isRequestPending的标志位,防止在请求还没完成的时候再次触发点赞操作。这样可以避免一些竞态条件的问题。希望这能帮到你。