使用中继反应本机 graphql 查询:未收到获取的数据

React Native graphql query with relay: fetched data not received

我有以下查询:

query {
  viewer{
    place(id: "1a4871311fe990d6d94cf1eed9fd65008856e118b790e7dcf728d86bc3aef7ec"){
      name
    }
  }
}

这当然可以在 GraphiQL 上正常工作。我想在 Relay 容器中使用这个查询,所以我创建了一个 RootContainer:

<RootContainer
  Component={PlaceDetailsComponent}
  route={new PlaceDetailsRoute({placeID: this.props.id})}
  renderFetched={(data) => {
    console.log('data: ', data);
    return (
      <PlaceDetailsComponent {...this.props} {...data}/>
    )
  } }
  renderLoading={() => <ProgressBar visible={true} />}/>

成功获取数据,但我在控制台上看到的是:

data:  { placeID: '1a4871311fe990d6d94cf1eed9fd65008856e118b790e7dcf728d86bc3aef7ec',
  viewer: 
   { __dataID__: 'Vmlld2VyLXs6aWQ9PiJ2aWV3ZXIifQ==',
     __fragments__: { '1::client': [ {} ] } } }

所以我检查了实际发送到服务器的内容以及收到的内容,我觉得一切正常:

这是我的路线:

import Relay, { 
  Route
} from 'react-relay';

class PlaceDetailsRoute extends Route {
  static queries = {
    viewer: () => Relay.QL`
      query {
        viewer 
      }
      `
  }
  static routeName = 'PlaceDetailsRoute'
}

export default PlaceDetailsRoute;

这是我的片段:

Relay.createContainer(PlaceDetailsContainer, {
  fragments: {
    viewer: () => Relay.QL`
      fragment on Viewer  {
        place(id: "1a4871311fe990d6d94cf1eed9fd65008856e118b790e7dcf728d86bc3aef7ec") {
          name,
        }
      }
      `
  }
});

有什么建议我应该改变吗?在此先感谢您的帮助!

这实际上是预期的行为。 Relay documentation of renderFetched有注释:

Even though we have access to the data object in renderFetched, the actual data is intentionally opaque. This prevents the renderFetched from creating an implicit dependency on the fragments declared by Component.

希望这能消除您的困惑。