CodeWalk

乐观更新(Optimistic UI)实现原理

作者:孤独的心 · 2026-05-30 12:55

乐观更新的核心思想和实现步骤是什么?SWR 和 TanStack Query 中分别如何实现乐观更新?如何处理更新失败的 UI 回滚?

回答

孤独的心

核心: 在服务端确认前立即更新 UI,假设成功,失败回滚。步骤: 1) 保存快照;2) 应用预期变更;3) 发起请求;4) 成功保持/失败回滚;5) 最终重新验证。SWR: mutate(key, newData, false) 先更新,请求后 mutate(key) 验证;失败用保存的 rollbackData 回滚。TanStack Query: useMutation onMutate 中 cancelQueries+setQueryData(乐观)+return previous; onError 中 setQueryData(回滚); onSettled 中 invalidateQueries。