在 Apollo Client 中使用变量作为 graphQL 操作名称

Using a variable as an graphQL operation name in Apollo Client

我正在连接到一个 graphQL 端点,以获取对页面上各种内容项的反应(例如喜欢、喜欢等)的数量。内容项由 GUID 标识。 端点不支持获取 GUID 数组的反应,因此我改用批量查询,批量大小为 20。 在这种情况下,端点要求批处理中的每个查询都具有唯一的操作名称。 如何将 GUID 传递到 GQL 查询中?

这是我的函数调用:

export const getReactionsByObjectIdsEngagement = async (
  objectIds: string[],
  apolloClient: ApolloClient<NormalizedCacheObject>
): Promise<IReaction[]> => {
  const results: IReaction[] = [];
  objectIds.forEach(async (contentId) => {
    await apolloClient
      .query({
        query: GET_REACTIONS_QUERY_IP(contentId),
        variables: { contentId: contentId },
        context: {
          clientName: EngagementClientName,
          headers: {
            'content-type': 'application/json',
          },
        },
        errorPolicy: 'ignore',
      })
      .then((data) => {
        console.log(data);
        const result: IReaction = {
          Id: contentId,
          Reactions: {
            Cool: data.data.getReactionsQuery.cool,
            Like: data.data.getReactionsQuery.like,
            LOL: data.data.getReactionsQuery.lol,
            Love: data.data.getReactionsQuery.love,
            Magic: data.data.getReactionsQuery.magic,
            Party: data.data.getReactionsQuery.party,
            Wow: data.data.getReactionsQuery.wow,
            YouRock: data.data.getReactionsQuery.youRock,
          },
        };
        results.push(result);
      })
      .catch((error) => {
        console.error(error);
      });
  });

  return results;
};

以及相关查询:

export const GET_REACTIONS_QUERY_IP = (contentId: string) => {
  return gql`
    query getReactionsQuery($contentId: ID!) {
      "${contentId}": reactionsCount(contentId: $contentId) {
        like
        love
        wow
        cool
        party
        youRock
        magic
        lol
      }
    }
  `;
};

我已经让插值本身工作了,但是请求没有成功触发,因为 Apollo 客户端在名称中遇到了意外的数字或字符串。 最初我以为是因为我在 GUID 中转义失败,所以我尝试在 Typescript 中生成一个随机数并将其传递到查询中。 同样,传递有效,但我在 Apollo 中遇到了同样的错误('Expected Name, got myQuery_99")。

Apollo client error

批处理在 forEach 循环中运行良好,请求在浏览器的 Developer Tools Network 选项卡中按预期显示。

帮助一名初级人员在第二天传递一些好消息。提前致谢!

如果你在这里结束:问题是在查询中我的变量周围有一组额外的引号:"${contentId}" 应该是 ${contentId}..