I following the official Tanstack Query useMutation docs to update my products after adding a new product:
ProductsPage.tsx
const { data, isError, isPending, error } = useQuery<
FetchResponse<'products'>,
Error
>({ queryKey: ['products'], queryFn: fetchProductsMock });
useEffect(() => {
console.log('useEffect data:', data);
if (data?.products) {
setProducts(data?.products);
}
}, [data]);
addProductModal.tsx
const queryClient = useQueryClient();
const mutation = useMutation({
mutationFn: createProductMock,
onSuccess: (data) => {
console.log('useMutation data:', data);
queryClient.setQueryData<StringRecord[]>(
['products'],
(oldProducts = []) => {
return [...oldProducts, data];
},
);
},
});
function handleSubmit(values: any) {
mutation.mutate(values);
form.reset();
setIsOpen(false);
}
console.log('useMutation data:', data); logs the new data, so I know the useMutation part was successful. However, console.log('useEffect data:', data); doesn't log anything, so I know useQuery didn't run again with the new data.
Am I doing something wrong?