给定GraphQL架构,是否可以进行客户端预变异验证?

时间:2016-10-03 14:25:41

标签: forms validation graphql relay

我有一个Relay应用程序,它与服务器共享一个GraphQL架构。对于每个突变,它查询服务器,服务器返回错误消息,告知哪个字段值无效。但是,鉴于客户端上也存在模式,是否可以针对此模式进行客户端验证?

1 个答案:

答案 0 :(得分:0)

一种实用的解决方案是使用Yup和Formik符号,然后在前后均共享的inputType周围手动创建yup模式对象。

虽然您没有根据中继编译器提供的架构来验证1-1,但这仍然是在客户端进行验证的实用方法。

JavaScript解决方案:基于自定义输入类型创建验证模式,并将validationSchema传递给Formik:

const Schema = object().shape({
  coolOrWhat: boolean()
});

return (
  <Formik
    initialValues={{
      coolOrWhat: true
    }}
    validationSchema={Schema}
    ...
  >
  {/* form inputs here */}
  </Formik>
)

TypeScript解决方案:实例化formik组件时,创建用于验证的对象,推断类型并注释该对象:

const Schema = object({
 foo: string()
});

export type SchemaType = InferType<typeof Schema>;

type Props = {
 onConfirm: (value: SchemaType) => void;
 onCancel: () => void;
};

<Formik<SchemaType>
 validationSchema={Schema} 
 ...>
 ...
</>