乐观更新后数据不一致怎么办?
我在用 React 做一个点赞功能,点了之后立刻更新 UI(乐观更新),但请求失败后不知道怎么回滚。
现在试过用 useState 保存旧值,但状态多了就乱了。比如:
const handleLike = async () => {
const prevLiked = liked;
const prevCount = likeCount;
setLiked(true);
setLikeCount(likeCount + 1);
try {
await api.like(postId);
} catch (err) {
setLiked(prevLiked); // 这里能回滚,但多个操作就不好维护了
setLikeCount(prevCount);
}
}
有没有更优雅的方式处理这种回滚?感觉每次都要手动存一堆 prev 变量太麻烦了。
这样不管多少状态要回滚,一个 action 搞定。懒人最爱。