Relay Modern - 如何在没有fragmentContainer的情况下使用fetchQuery

时间:2017-06-13 11:18:47

标签: javascript ecmascript-6 graphql relayjs relay

所以我正在研究用于服务器端渲染的反应应用程序的中继。我正在尝试使用relay从graphql端点获取数据。

我有点跟随this,使用fetchQuery通过中继编译器从编译的graphql发出请求来获取数据。

e.g。

import { graphql, fetchQuery } from 'react-relay'

const query = graphql`
   query SomeQuery($id: ID) {
      author(id: $id) {
         name
         ...SomeFragment_authorData
      }
   }
`

const variables = { "id" : "1f" };

fetchQuery(env, query, variables)
   .then((jsonData) => { console.log(jsonData); })

当它完成运行时,它会给我一些这样的对象:

{
  author: {
    __fragment: { ... }
    ...
  }
}

我认为包含createFragmentContainer()的子组件将使用它来获取真实数据。

由于我没有使用createFragmentContainer(),我不确定如何正确获取数据,有没有办法将上述响应转换为真实数据? 任何帮助将不胜感激!

注意:

目前我正在采取这些措施来获取数据:env._network.fetch(query(), variables)。它工作正常,但我需要挖掘私有变量似乎不正确,以便获得我提供给fetch对象的Network

2 个答案:

答案 0 :(得分:0)

您需要在片段传播中添加一个relay指令: ...SomeFragment_authorData @relay(mask: false)

答案 1 :(得分:0)

您可以使用中继环境和中继运行时实用程序。

import {
  createOperationDescriptor,
  getRequest,
} from 'relay-runtime';


const request = getRequest(query);
const operation = createOperationDescriptor(request, variables);
environment.execute({ operation }).toPromise();