我正在尝试通过 Formik 上传带有 React-dropzone 的图像。
当我发送这张图片时,我用它在 img html 上预览它,效果很好。
当我点击发送时,仅发送预览对象,其余信息消失...
我不知道是否适用于 formik,因为当我打印值时,它会为我提供正确的信息,但是当发送时,一切都会改变。
这是一个关于这个问题的视频,这是一个被删除的小例子,答案如下。
请帮忙!
这是你的Mutation
类型:
type Mutation {
uploadFile(file: Upload!): Boolean!
}
您的架构将文件定义为采用名为typeuploadFile
的单个参数。这意味着参数是非空的,即空不能作为值传递给它。file
Upload!
!
这是您的查询:
mutation UploadFileMutation($file: Upload) {
uploadFile(file: $file)
}
您将变量 $file 传递给参数file
,但您告诉 GraphQL 这个变量的类型是Upload
,而不是Upload!
。换句话说,你说那$file
可能是空的。根据规范,这会导致类型验证失败。
从规格:
变量用法必须与它们传递给的参数兼容。如果在完全不匹配的类型的上下文中使用变量,或者如果将变量中的可为空类型传递给非空参数类型,则会发生验证失败。
换句话说,如果字段是Upload!
,则只能使用也定义为 的变量Upload!
。如果该字段是类型Upload
,则可以传入Upload!
或Upload
。
TLDR;将您的查询更改为:
mutation UploadFileMutation($file: Upload!) {
uploadFile(file: $file)
}
或者,如果文件可能为空,请将您的字段类型更新为可为空。
您的变异操作和您的模式之间存在类型不匹配。
变异操作接受一个null
值,但模式不接受;因此该操作无法通过验证步骤。
将此行更改为Upload!
:https ://github.com/MontoyaAndres/bug-upload/blob/master/client/src/App.js#L8
Upload
或者,如果您希望文件可以为空,请将您的架构更改为。