getFiles() 与 relayjs 突变反应本机

Posted

技术标签:

【中文标题】getFiles() 与 relayjs 突变反应本机【英文标题】:getFiles() in react native with relayjs mutations 【发布时间】:2017-03-05 05:15:05 【问题描述】:

我需要从 react native app throw relayjs 突变下载多个文件。文件数组如下所示:

[ uri: 'file:///path/to/file.jpg', mime: 'image/jpg', uri: 'file:///path/to/file2.jpg', mime: 'image/jpg', ]

我发现 getFiles() func 用于突变,但我不明白它应该返回什么格式的数据?

【问题讨论】:

getFiles 接收一个对象,'file1': file1, 'file2': file2,其中 file1 是文件类型。检查中继文档:facebook.github.io/relay/docs/… 什么是 react-native 中的文件类型? developer.mozilla.org/en-US/docs/Web/API/File 你需要从 uri 中获取文件,我猜。我会在接下来的几天里深入研究这个 有人解决了这个问题吗? 【参考方案1】:

这就是我解决它的方法:

我使用这个包https://github.com/jeanpan/react-native-camera-roll-picker从相机胶卷中获取图像:

您可以使用它进行测试,将其添加到您的渲染中:

<CameraRollPicker
          callback=this.getSelectedImage
          imagesPerRow=4
          imageMargin=1
          maximum=1
        />

这是我的getSelectedImage的实现,我只是发送一张图片,但是你可以发送多张图片,files是一个对象,值是一张图片。

getSelectedImage = (images) => 
    const image = images[0];

    const files = 
      [image.filename]: 
        uri: image.uri,
        name: image.filename,
      ,
    ;

    const mutation = new UploadUserProfileMutation(
      files,
    );

    this.props.relay.commitUpdate(mutation, callbacks);
  ;

在你的突变中添加方法getFiles:

export default class UploadUserProfileMutation extends Relay.Mutation 
...
  getFiles() 
    return this.props.files;
  
...

你应该像正常的突变一样完成突变

【讨论】:

好的,我的 getFiles() 看起来像 getFiles() return files: this.props.photo ; 其中 this.props.photo = photo0: uri:'file:///storage/emulated/0/DCIM/Camera/IMG_20161015_054936.jpg', name: 'IMG_20161015_054936.jpg' 并且我有一个错误“TypeError:网络请求失败”并且我的服务器没有看到任何请求.但是当我从我的突变中删除 getFiles func 时,一切正常。我做错了什么?( 你需要在你的服务器中设置一个multer来接受文件

以上是关于getFiles() 与 relayjs 突变反应本机的主要内容,如果未能解决你的问题,请参考以下文章

relayjs:使用中继进行身份验证,使用哪个突变?

Relayjs Graphql 用户认证

如何从单个反应组件中调用多个 graphql 突变?

如何使用 Relay Modern 突变进行文件上传?

如何让 Next JS 动态路由与 RelayJS 一起使用

如何获得突变反应?