javascript Formik tRPC错误“预期字符串,收到空值”

lx0bsm1f  于 2023-03-06  发布在  Java
关注(0)|答案(1)|浏览(150)

我在我的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记录输入值时,我得到了正确的值和类型。我不知道为什么会发生这种情况。有什么想法吗?

wqsoz72f

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支持团队,查看他们是否可以提供有关错误的详细信息。

相关问题