Apollo客户端的GraphQL模式或查询上的计算字段

Apollo客户端的GraphQL模式或查询上的计算字段,graphql,apollo-client,Graphql,Apollo Client,我有一个GraphQL查询,它返回两个字段,titleDe和titleFr,用两种不同的语言表示一篇文章的标题 我希望在客户端有第三个字段(可能是本地定义的),用于在title中存储当前语言的标题。然后,我的应用程序应该能够始终仅调用title,并以当前语言获取标题 Apollo(Local State)或GraphQL中是否有一个等效的计算字段,允许我调用title,它检查Apollo Local State中全局设置的区域设置(因此是另一个查询),然后基于此返回titleDe或titleFr

我有一个GraphQL查询,它返回两个字段,
titleDe
titleFr
,用两种不同的语言表示一篇文章的标题

我希望在客户端有第三个字段(可能是本地定义的),用于在
title
中存储当前语言的标题。然后,我的应用程序应该能够始终仅调用
title
,并以当前语言获取标题

Apollo(Local State)或GraphQL中是否有一个等效的计算字段,允许我调用
title
,它检查Apollo Local State中全局设置的区域设置(因此是另一个查询),然后基于此返回
titleDe
titleFr

我还没有和GraphQL和Apollo合作那么多。我知道如何在其他地方州管理者中解决这一问题,例如NgRx、Vuex、Redux以及getter/selector的概念


我的目标是从我的应用程序组件中抽象titleDe/Fr逻辑,因此它们不需要具有所有语言属性的模型,只能调用简化的
title
属性,该属性将根据全局设置区域设置返回正确的字符串。

您可以使用Apollo local state轻松添加其他字段。从:

本地解析器与远程解析器非常相似。Apollo Client不是将GraphQL查询发送到远程GraphQL端点,然后远程GraphQL端点对您的查询运行解析器函数以填充并返回结果集,而是对用@Client指令标记的任何字段运行本地定义的解析器函数

下面是一个简单的例子:

const GET_LOCALE = gql`
  query GetLocale {
    locale @client
  }
`;

const client = new ApolloClient({
  cache,
  link,
  resolvers: {
    Article: { // or whatever your actual type is called
      title: (article, _args, { cache }) => {
        const { locale } = cache.readQuery({ query: GET_LOCALE });
        switch (locale) {
          case 'de': return article.titleDe
          case 'fr': return article.titleFr
        }
      },
    },
  },
});

// Initialize the cache after creating it
cache.writeData({
  data: {
    locale: getPreferenceOrProvideDefault(),
  },
});
在这里,我们还将
locale
存储在本地状态中,并使用
readQuery
在解析器中获取它。但是,您也可以直接从其他地方(如
localStorage
)获取首选项

请注意,您仍然需要请求这些字段作为查询的一部分,也就是说,
title
字段不会扩展到相应的服务器端字段集