仅返回选定字段 React Native / GraphQL / Amplify

Posted

技术标签:

【中文标题】仅返回选定字段 React Native / GraphQL / Amplify【英文标题】:Return selected fields only React Native / GraphQL / Amplify 【发布时间】:2021-09-17 12:24:39 【问题描述】:

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

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

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

谢谢!

【问题讨论】:

【参考方案1】:

我仍处于熟悉 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 ... 

【讨论】:

以上是关于仅返回选定字段 React Native / GraphQL / Amplify的主要内容,如果未能解决你的问题,请参考以下文章

如何仅使用 React Native 中的 if 语句返回 useEffect

突出显示 React-Native FlatList 中的选定项目

使用 react-native-track-player 从 flatlist 播放选定的歌曲

Realm 在 React native 上不返回异常

React Native:FlatList为所有项目而不是选定项目打开模式

React Native Android:如何能够访问不同的 Textinput 字段?