首页 > 解决方案 > 仅返回选定字段 React Native / GraphQL / Amplify

问题描述

我在 GraphQL 中有以下基本列表查询:

API.graphql(graphqlOperation(listSomething,{filter: filter})).then(({ data: { something } }) => {
// Returns the entire object
})

这将返回一个包含整个对象的数组,但正如我在多个 GraphQL 教程中看到的那样,出于显而易见的原因,我想利用仅返回/提取选择字段的实用程序。然而,关于 GraphQL + RN + Amplify 的信息并不多。那么我将如何重写此查询以仅返回属性id?还是我必须在graphql/queries.js文件中将其定义为解析器?我正在使用自动生成的查询,因此将您自己的查询添加到该文件有点像一种反模式——如果我错了,请纠正我。

谢谢!

标签: react-nativegraphqlaws-amplify

解决方案


我仍处于熟悉 AWS 的早期阶段,因此请持保留态度。

您自动生成queries.js的将包含一个 listSomething 查询,看起来像这样:

export const listTodos = /* GraphQL */ `
  query ListTodos(
    $filter: ModelTodoFilterInput
    $limit: Int
    $nextToken: String
  ) {
    listTodos(filter: $filter, limit: $limit, nextToken: $nextToken) {
      items {
        id
        userID
        name
        description
        createdAt
        updatedAt
      }
      nextToken
    }
  }
`;

我创建了一个名为的新文件夹/src/customGraphQL并创建了一个名为customListTodos.js. 我在那里复制了自动生成的查询,更改了查询名称,并删除了我不需要的字段。

export const customListTodos = /* GraphQL */ `
  query CustomListTodos(
    $filter: ModelTodoFilterInput
    $limit: Int
    $nextToken: String
  ) {
    listTodos(filter: $filter, limit: $limit, nextToken: $nextToken) {
      items {
        name
        description
      }
      nextToken
    }
  }
`;

我只更改了查询的名称,但将内部函数的名称保留为listTodos,因此我正在运行该查询的自定义版本。如果将原始 API 推送到 AWS,您可以导入并使用自定义查询:

import {customListTodos} from './src/customGraphQL/customListTodos';
...
API.graphql(graphqlOperation(customListTodos ... 


推荐阅读