useMutation
Returns mutate (fire-and-forget) and mutateAsync (awaitable). No onSuccess
refetch and no key — the client's declared relations refetch the watching query
for you:
import { useMutation } from "@tahanabavi/typefetch-react";
function RenameButton({ id }: { id: string }) {
const rename = useMutation(api.modules.user.updateUser);
return (
<button
disabled={rename.isPending}
onClick={() => rename.mutate({ path: { id }, body: { name: "Ada" } })}
>
{rename.isPending ? "saving…" : "rename"}
</button>
);
}Because the engine is transport-agnostic, the same hook drives a typesocket
acked event — useMutation(socket.modules.chat.sendMessage) is just another
source, in the same cache.