Apollo Stack是否支持全局对象识别,如Relay的节点接口?

kkk*_*kkk 7 relay node.js graphql apollostack

我在Apollo Stack和Relay都很新.我想在他们之间做出选择来投入我的时间.在阅读了学习GraphQL和Relay这本书之后,我转向Apollo了解它提供的内容但是现在互联网上没有太多资源.

我最近有这个问题,但无法找到答案:Apollo是否支持全局对象识别,如Relay与节点接口一样?如果没有,它是否有任何替代解决方案来支持全局对象识别?

mar*_*ani 11

是的!

它当前的工作方式(版本0.5 apollo-client)是使用构造函数接受的dataIdFromObject函数ApolloClient.

如果所有节点都有一个id字段,并且它们在所有节点中都是唯一的(例如,在Graphcool中,我们使用此库生成唯一ID ):

import ApolloClient from 'apollo-client';

const client = new ApolloClient({
  dataIdFromObject: o => o.id
});
Run Code Online (Sandbox Code Playgroud)

您必须确保id在要标准化的每个查询中包含该字段.

如果您的ID仅为每种类型唯一,则可以将它们组合在一起__typename以创建唯一标识符:

const client = new ApolloClient({
  dataIdFromObject: (result) => {
    if (result.id && result.__typename) {
      return result.__typename + result.id;
    }

    // Make sure to return null if this object doesn't have an ID
    return null;
  },
});
Run Code Online (Sandbox Code Playgroud)

代码取自Apollo官方文档.