我在我的Nextjs应用程序中使用Formik和tRPC。当我提交表单时,我收到以下错误:
TRPCClientError: [
{
"code": "invalid_type",
"expected": "string",
"received": "null",
"path": [
"user",
"handle"
],
"message": "Expected string, received null"
}
]
这是我的表格:
const tenantMutation = trpc.tenant.createTenant.useMutation();
const CreateTenantSchema = z.object({
organization: z
.string()
.min(3, "Too short!")
.max(60, "Too long!")
.regex(organizationRegex, "Only alphanumeric characters are allowed"),
handle: z
.string()
.min(3, "Too short!")
.max(40, "Too long!")
.regex(handleRegex, "Only alphanumeric characters are allowed"),
});
const formik = useFormik({
initialValues: {
organization: "",
handle: "",
},
onSubmit: async (values) => {
// if (!user.data) return;
await tenantMutation.mutateAsync({
name: values.organization,
handle: values.handle,
user: user.data as UserSchema,
});
},
validationSchema: toFormikValidationSchema(CreateTenantSchema),
});
return (
<div className="grid gap-10 grid-cols-1 mt-4 text-center">
<p className="text-2xl font-medium">Welcome aboard!</p>
<p className="text-lg font-medium">
Looks like you need to create or join an organization.
</p>
<form onSubmit={formik.handleSubmit} className="space-y-4 mx-auto">
<VTextfield
id="organization"
name="organization"
type="text"
onChange={formik.handleChange}
label={"Organization"}
placeholder={"My Company"}
value={formik.values.organization}
errorMessage={formik.errors.organization}
/>
<VTextfield
id="handle"
name="handle"
type="text"
onChange={formik.handleChange}
label={"Handle"}
placeholder={"jsmith23"}
value={formik.values.handle}
errorMessage={formik.errors.handle}
/>
<VButton
text="Create organization"
type="submit"
classNames={["w-[290px] mx-auto"]}
disabled={
(formik.errors.handle !== undefined &&
formik.errors.handle.length > 0) ||
(formik.errors.organization !== undefined &&
formik.errors.organization.length > 0)
}
/>
</form>
</div>
);
};
当我用console.log记录输入值时,我得到了正确的值和类型。我不知道为什么会发生这种情况。有什么想法吗?
1条答案
按热度按时间wqsoz72f1#
您看到的错误消息表明,“user”对象中的“handle”字段应为字符串,但实际为“null”。在您提供的代码中,“user”对象似乎来自“user.data”属性,该属性被强制转换为“UserSchema”。
一种可能是“user.data”属性未定义或为“null”,因此,在“tenantMutation.mutateAsync”调用中未正确设置句柄属性。
若要调试此问题,您可以尝试在调用“tenantMutation.mutateAsync”之前,在“onSubmit”函数中记录“user.data”和“values.handle”的值。这将有助于您确定是否正确设置了“user.data”属性,以及是否正确传递了“handle”值。
另一种可能是“tenantMutation.mutateAsync”函数中存在错误,导致“handle”属性在发送到服务器之前设置为“null”。您可能需要检查此函数的实现,以查看是否存在任何问题。
最后,请求的服务器端验证可能存在问题,导致返回错误。您可能需要检查服务器日志或联系API支持团队,查看他们是否可以提供有关错误的详细信息。