useMutation()
On this page
Example
Backend code
server/routers/_app.ts
import { const initTRPC: TRPCBuilder<object, object>initTRPC } from '@trpc/server';
import { import zz } from 'zod';
export const const t: TRPCRootObject<object, object, RuntimeConfigOptions<object, object>, {
ctx: object;
meta: object;
errorShape: DefaultErrorShape;
transformer: false;
}>
t = const initTRPC: TRPCBuilder<object, object>initTRPC.TRPCBuilder<object, object>.create<RuntimeConfigOptions<object, object>>(opts?: RuntimeConfigOptions<object, object> | undefined): TRPCRootObject<object, object, RuntimeConfigOptions<object, object>, {
ctx: object;
meta: object;
errorShape: DefaultErrorShape;
transformer: false;
}>
create();
export const const appRouter: BuiltRouter<{
ctx: object;
meta: object;
errorShape: DefaultErrorShape;
transformer: false;
}, DecorateCreateRouterOptions<{
login: MutationProcedure<{
input: {
name: string;
};
output: {
user: {
name: string;
role: "ADMIN";
};
};
meta: object;
errorShape: DefaultErrorShape;
}>;
}>>
appRouter = const t: TRPCRootObject<object, object, RuntimeConfigOptions<object, object>, {
ctx: object;
meta: object;
errorShape: DefaultErrorShape;
transformer: false;
}>
t.TRPCRootObject<object, object, RuntimeConfigOptions<object, object>, { ctx: object; meta: object; errorShape: DefaultErrorShape; transformer: false; }>.router: RouterBuilder
<{
login: MutationProcedure<{
input: {
name: string;
};
output: {
user: {
name: string;
role: "ADMIN";
};
};
meta: object;
errorShape: DefaultErrorShape;
}>;
}>(_: {
login: MutationProcedure<{
input: {
name: string;
};
output: {
user: {
name: string;
role: "ADMIN";
};
};
meta: object;
errorShape: DefaultErrorShape;
}>;
}) => BuiltRouter<{
ctx: object;
meta: object;
errorShape: DefaultErrorShape;
transformer: false;
}, DecorateCreateRouterOptions<{
login: MutationProcedure<{
input: {
name: string;
};
output: {
user: {
name: string;
role: "ADMIN";
};
};
meta: object;
errorShape: DefaultErrorShape;
}>;
}>>
router({
// Create procedure at path 'login'
// The syntax is identical to creating queries
login: MutationProcedure<{
input: {
name: string;
};
output: {
user: {
name: string;
role: "ADMIN";
};
};
meta: object;
errorShape: DefaultErrorShape;
}>
login: const t: TRPCRootObject<object, object, RuntimeConfigOptions<object, object>, {
ctx: object;
meta: object;
errorShape: DefaultErrorShape;
transformer: false;
}>
t.TRPCRootObject<object, object, RuntimeConfigOptions<object, object>, { ctx: object; meta: object; errorShape: DefaultErrorShape; transformer: false; }>.procedure: ProcedureBuilder<object, object, object, UnsetMarker, UnsetMarker, UnsetMarker, UnsetMarker, false, DefaultErrorShape>procedure
// using zod schema to validate and infer input values
.ProcedureBuilder<object, object, object, UnsetMarker, UnsetMarker, UnsetMarker, UnsetMarker, false, DefaultErrorShape>.input<z.ZodObject<{
name: z.ZodString;
}, z.core.$strip>>(schema: z.ZodObject<{
name: z.ZodString;
}, z.core.$strip>): ProcedureBuilder<object, object, object, {
name: string;
}, {
name: string;
}, UnsetMarker, UnsetMarker, false, DefaultErrorShape>
input(
import zz.function object<{
name: z.ZodString;
}>(shape?: {
name: z.ZodString;
} | undefined, params?: string | {
error?: string | z.core.$ZodErrorMap<NonNullable<z.core.$ZodIssueUnrecognizedKeys | z.core.$ZodIssueInvalidType<unknown>>> | undefined;
message?: string | undefined | undefined;
} | undefined): z.ZodObject<{
name: z.ZodString;
}, z.core.$strip>
object({
name: z.ZodStringname: import zz.function string(params?: string | z.core.$ZodStringParams): z.ZodString (+1 overload)string(),
}),
)
.ProcedureBuilder<object, object, object, { name: string; }, { name: string; }, UnsetMarker, UnsetMarker, false, DefaultErrorShape>.mutation<{
user: {
name: string;
role: "ADMIN";
};
}>(resolver: ProcedureResolver<object, object, object, {
name: string;
}, UnsetMarker, {
user: {
name: string;
role: "ADMIN";
};
}>): MutationProcedure<{
input: {
name: string;
};
output: {
user: {
name: string;
role: "ADMIN";
};
};
meta: object;
errorShape: DefaultErrorShape;
}>
mutation((opts: ProcedureResolverOptions<object, object, object, {
name: string;
}>
opts) => {
// Here some login stuff would happen
return {
user: {
name: string;
role: "ADMIN";
}
user: {
name: stringname: opts: ProcedureResolverOptions<object, object, object, {
name: string;
}>
opts.ProcedureResolverOptions<object, object, object, { name: string; }>.input: {
name: string;
}
input.name: stringname,
role: "ADMIN"role: 'ADMIN' as type const = "ADMIN"const,
},
};
}),
});
export type type AppRouter = Router<{
ctx: object;
meta: object;
errorShape: DefaultErrorShape;
transformer: false;
}, DecorateCreateRouterOptions<{
login: MutationProcedure<{
input: {
name: string;
};
output: {
user: {
name: string;
role: "ADMIN";
};
};
meta: object;
errorShape: DefaultErrorShape;
}>;
}>> & DecorateCreateRouterOptions<{
login: MutationProcedure<{
input: {
name: string;
};
output: {
user: {
name: string;
role: "ADMIN";
};
};
meta: object;
errorShape: DefaultErrorShape;
}>;
}>
AppRouter = typeof const appRouter: BuiltRouter<{
ctx: object;
meta: object;
errorShape: DefaultErrorShape;
transformer: false;
}, DecorateCreateRouterOptions<{
login: MutationProcedure<{
input: {
name: string;
};
output: {
user: {
name: string;
role: "ADMIN";
};
};
meta: object;
errorShape: DefaultErrorShape;
}>;
}>>
appRouter;import { const trpc: CreateTRPCReactBase<BuiltRouter<{
ctx: object;
meta: object;
errorShape: DefaultErrorShape;
transformer: false;
}, DecorateCreateRouterOptions<{
login: MutationProcedure<{
input: {
name: string;
};
output: {
user: {
name: string;
role: "ADMIN";
};
};
meta: object;
errorShape: DefaultErrorShape;
}>;
}>>, unknown> & DecorateRouterRecord<{
ctx: object;
meta: object;
errorShape: DefaultErrorShape;
transformer: false;
}, DecorateCreateRouterOptions<{
login: MutationProcedure<{
input: {
name: string;
};
output: {
user: {
name: string;
role: "ADMIN";
};
};
meta: object;
errorShape: DefaultErrorShape;
}>;
}>>
trpc } from '../utils/trpc';
export function function MyComponent(): React.JSX.ElementMyComponent() {
const const mutation: UseTRPCMutationResult<{
user: {
name: string;
role: "ADMIN";
};
}, TRPCClientErrorLike<{
input: {
name: string;
};
output: {
user: {
name: string;
role: "ADMIN";
};
};
transformer: false;
errorShape: DefaultErrorShape;
}>, {
name: string;
}, unknown>
mutation = const trpc: CreateTRPCReactBase<BuiltRouter<{
ctx: object;
meta: object;
errorShape: DefaultErrorShape;
transformer: false;
}, DecorateCreateRouterOptions<{
login: MutationProcedure<{
input: {
name: string;
};
output: {
user: {
name: string;
role: "ADMIN";
};
};
meta: object;
errorShape: DefaultErrorShape;
}>;
}>>, unknown> & DecorateRouterRecord<{
ctx: object;
meta: object;
errorShape: DefaultErrorShape;
transformer: false;
}, DecorateCreateRouterOptions<{
login: MutationProcedure<{
input: {
name: string;
};
output: {
user: {
name: string;
role: "ADMIN";
};
};
meta: object;
errorShape: DefaultErrorShape;
}>;
}>>
trpc.login: DecoratedMutation<{
input: {
name: string;
};
output: {
user: {
name: string;
role: "ADMIN";
};
};
transformer: false;
errorShape: DefaultErrorShape;
}>
login.useMutation: <unknown>(opts?: UseTRPCMutationOptions<{
name: string;
}, TRPCClientErrorLike<{
input: {
name: string;
};
output: {
user: {
name: string;
role: "ADMIN";
};
};
transformer: false;
errorShape: DefaultErrorShape;
}>, {
user: {
name: string;
role: "ADMIN";
};
}, unknown> | undefined) => UseTRPCMutationResult<{
user: {
name: string;
role: "ADMIN";
};
}, TRPCClientErrorLike<{
input: {
name: string;
};
output: {
user: {
name: string;
role: "ADMIN";
};
};
transformer: false;
errorShape: DefaultErrorShape;
}>, {
name: string;
}, unknown>
useMutation();
const const handleLogin: () => voidhandleLogin = () => {
const const name: "John Doe"name = 'John Doe';
const mutation: UseTRPCMutationResult<{
user: {
name: string;
role: "ADMIN";
};
}, TRPCClientErrorLike<{
input: {
name: string;
};
output: {
user: {
name: string;
role: "ADMIN";
};
};
transformer: false;
errorShape: DefaultErrorShape;
}>, {
name: string;
}, unknown>
mutation.mutate: (variables: {
name: string;
}, options?: MutateOptions<{
user: {
name: string;
role: "ADMIN";
};
}, TRPCClientErrorLike<{
input: {
name: string;
};
output: {
user: {
name: string;
role: "ADMIN";
};
};
transformer: false;
errorShape: DefaultErrorShape;
}>, {
name: string;
}, unknown> | undefined) => void
mutate({ name: stringname });
};
return (
<React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>div>
<React.JSX.IntrinsicElements.h1: React.DetailedHTMLProps<React.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>h1>Login Form</React.JSX.IntrinsicElements.h1: React.DetailedHTMLProps<React.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>h1>
<React.JSX.IntrinsicElements.button: React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>button React.DOMAttributes<HTMLButtonElement>.onClick?: React.MouseEventHandler<HTMLButtonElement> | undefinedonClick={const handleLogin: () => voidhandleLogin} React.ButtonHTMLAttributes<HTMLButtonElement>.disabled?: boolean | undefineddisabled={const mutation: UseTRPCMutationResult<{
user: {
name: string;
role: "ADMIN";
};
}, TRPCClientErrorLike<{
input: {
name: string;
};
output: {
user: {
name: string;
role: "ADMIN";
};
};
transformer: false;
errorShape: DefaultErrorShape;
}>, {
name: string;
}, unknown>
mutation.isPending: booleanisPending}>
Login
</React.JSX.IntrinsicElements.button: React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>button>
{const mutation: UseTRPCMutationResult<{
user: {
name: string;
role: "ADMIN";
};
}, TRPCClientErrorLike<{
input: {
name: string;
};
output: {
user: {
name: string;
role: "ADMIN";
};
};
transformer: false;
errorShape: DefaultErrorShape;
}>, {
name: string;
}, unknown>
mutation.error: TRPCClientErrorLike<{
input: {
name: string;
};
output: {
user: {
name: string;
role: "ADMIN";
};
};
transformer: false;
errorShape: DefaultErrorShape;
}> | null
error && <React.JSX.IntrinsicElements.p: React.DetailedHTMLProps<React.HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>p>Something went wrong! {const mutation: TRPCHookResult & Override<MutationObserverErrorResult<{
user: {
name: string;
role: "ADMIN";
};
}, TRPCClientErrorLike<{
input: {
name: string;
};
output: {
user: {
name: string;
role: "ADMIN";
};
};
transformer: false;
errorShape: DefaultErrorShape;
}>, {
name: string;
}, unknown>, {
mutate: UseMutateFunction<{
user: {
name: string;
role: "ADMIN";
};
}, TRPCClientErrorLike<{
input: {
name: string;
};
output: {
user: {
name: string;
role: "ADMIN";
};
};
transformer: false;
errorShape: DefaultErrorShape;
}>, {
name: string;
}, unknown>;
}> & {
...;
}
mutation.error: TRPCClientErrorLike<{
input: {
name: string;
};
output: {
user: {
name: string;
role: "ADMIN";
};
};
transformer: false;
errorShape: DefaultErrorShape;
}>
error.TRPCClientErrorBase<DefaultErrorShape>.message: stringmessage}</React.JSX.IntrinsicElements.p: React.DetailedHTMLProps<React.HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>p>}
</React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>div>
);
}