4

我正在使用react-relay/compat 1.1.0,我需要编写一个能够上传文件的突变。在 Relay Classic 中,您可以getFiles()用来支持突变中的文件上传:

class AddImageMutation extends Relay.Mutation {
   getMutation() {
     return Relay.QL`mutation{ introduceImage }`;
   }

   getFiles() {
     return {
       file: this.props.file,
     };
   }
   ...
}

但是在Relay Modern文档中没有找到任何上传文件的功能痕迹:

const {commitMutation} = require('react-relay');

commitMutation(
  environment: Environment,
  config: {
    mutation: GraphQLTaggedNode,
    variables: Variables,
    onCompleted?: ?(response: ?Object) => void,
    onError?: ?(error: Error) => void,
    optimisticResponse?: ?() => Object,
    optimisticUpdater?: ?(store: RecordSourceSelectorProxy) => void,
    updater?: ?(store: RecordSourceSelectorProxy) => void,
    configs?: Array<RelayMutationConfig>,

    // files: ... ?
  },
);

现代继电器是否支持这一点?如果是这样,这样做的方法是什么?谢谢。

4

2 回答 2

4

您必须将文件作为对象uploadables中的config对象提供commitMutation,然后在网络层中实现实际上传,因为对服务器的获取请求必须是多部分形式而不是 application/json。

有关完整示例,请参阅https://github.com/facebook/relay/issues/1844#issuecomment-316893590

于 2017-11-02T08:37:06.287 回答
1

发现了这个问题,因为我自己也有同样的问题。

还不确定完整的答案,但我开始阅读 Relay 源代码并基于 packages/relay-runtime/mutations/commitRelayModernMutation.js 看起来你可以传递uploadables给你的突变。

于 2017-07-30T19:49:40.173 回答