tRPCttRPC
Powered by
cugsC
tRPC•3y ago•
7 replies
cugs

Multiple optimistic updates and old data from refetches

Hi all, I'm new to tRPC and React Query and I'm just trying to get my head around what exactly I'm doing wrong when trying to implement optimistic updates.

To help illustrate the issue I'm having, I have a list of items that are deletable, and I want to be able to optimistically update the UI when they're deleted, which I have working, except for this one bug... When I delete one item, then delete a second item about 1-2 seconds later (i.e. before the first deletion has a chance to refetch the server data) I notice that the UI updates from the server with the state of only the first deletion, hence the UI optimistically deletes both items, then refetches, which shows one of the deleted items still there, then shortly after it correctly updates again to the correct state after the 2nd refetch.

To solve this issue, I thought that I should be using
.cancel()
.cancel()
to prevent out-of-date data being returned by refetches that came before the latter mutation, but for whatever reason, that isn't working. (Likely cause I'm stoopid 🙃)

To better illustrate, I've included a log of the order of execution: (You can see exactly where these console.logs are placed in my code which I'll also include below)

@acme/expo:dev:  LOG  onMutate <--- first deletion via UI
@acme/expo:dev:  LOG  onMutate <--- second deletion via UI
@acme/expo:dev:  LOG  onSettled <--- first deletion is settled
@acme/expo:dev:  LOG  refetch <--- this is the reason for the incorrect state being shown 😭
@acme/expo:dev:  LOG  onSettled <--- second deletion is settled
@acme/expo:dev:  LOG  refetch <--- this updates the UI to the correct state
@acme/expo:dev:  LOG  onMutate <--- first deletion via UI
@acme/expo:dev:  LOG  onMutate <--- second deletion via UI
@acme/expo:dev:  LOG  onSettled <--- first deletion is settled
@acme/expo:dev:  LOG  refetch <--- this is the reason for the incorrect state being shown 😭
@acme/expo:dev:  LOG  onSettled <--- second deletion is settled
@acme/expo:dev:  LOG  refetch <--- this updates the UI to the correct state


I've actually been stuck on this for an embarassingly long time, so any help would be GREATLY appreciated 🙏
tRPCJoin
Move Fast & Break Nothing. End-to-end typesafe APIs made easy.
5,015Members
Resources
Recent Announcements

Similar Threads

Was this page helpful?

Similar Threads

trpc optimistic updates causing data flicker
Liltripple_reidLLiltripple_reid / ❓-help
2y ago
setMutationDefaults for optimistic updates
Haaxor1689HHaaxor1689 / ❓-help
3y ago
optimistic updates tRPC v11 + TanStack Query v5
SparkSSpark / ❓-help
3y ago