T
tRPC

❓-help

setMutationDefaults for optimistic updates

HHaaxor16895/16/2023
I have a preferences router, with a get query and a set mutation. I had optimistic updates set up in the onSuccess of the useMutation hook, wherever I used it, like this:
const preferences = api.preferences.get.useQuery();
const savePreferences = api.preferences.set.useMutation({
onSuccess: v =>
queryClient.setQueryData(
getQueryKey(api.preferences.get, undefined, 'query'),
v
)
});
const preferences = api.preferences.get.useQuery();
const savePreferences = api.preferences.set.useMutation({
onSuccess: v =>
queryClient.setQueryData(
getQueryKey(api.preferences.get, undefined, 'query'),
v
)
});
Now that I'm adding more and more instances where I need to use the set endpoint, I don't want to copy paste the onSuccess for optimistic updates. There is the setMutationDefaults function of query client that would be ideal for this but it isn't working.
queryClient.setMutationDefaults(getQueryKey(api.preferences.set), {
onSuccess: v =>
queryClient.setQueryData(
getQueryKey(api.preferences.get, undefined, 'query'),
v
)
})
queryClient.setMutationDefaults(getQueryKey(api.preferences.set), {
onSuccess: v =>
queryClient.setQueryData(
getQueryKey(api.preferences.get, undefined, 'query'),
v
)
})
Is this not working in tRPC wrapper because it's not setting the mutationKey or am I doing something wrong? Like I could make a wrapper hook for this mutation but using these defaults seems to me like much cleaner solution. Hmm I found this closed issue https://github.com/trpc/trpc/pull/3528 I guess the adding of mutationKey was forgotten about? After some investigation, turns out that for whatever reason, onSettled and onMutate work just fine. onSettled works only if I directly put it into hook call itself. oh I found the culprit Ok, made a PR with proposed fix 🙂 https://github.com/trpc/trpc/pull/4371

Looking for more? Join the community!