React中使用AWS Amplify Datastore如何查询表的指定单列数据
问题解答
AWS Amplify DataStore 本身不支持查询阶段直接指定返回单列,所有Datastore.query调用默认会返回匹配记录的全部字段,这是它本地优先的设计逻辑决定的:DataStore会先把云端数据全量同步到本地存储,所有查询操作都是在本地执行,没有做字段级的查询裁剪能力。
针对你要获取id列填充下拉菜单的需求,有两种可行的实现方式:
- 方案1:本地提取字段(优先推荐,适合绝大多数场景)
因为Datastore.query走的是本地存储查询,没有网络请求开销,就算拿到全量记录再提取目标字段,性能损耗几乎可以忽略,代码实现也最简单:// 执行原有查询拿到全量记录 const allRecords = await DataStore.query(myTable); // 提取id列生成下拉选项数组 const idOptions = allRecords.map(item => item.id); - 方案2:自定义GraphQL查询(仅适合单表数据量极大的场景)
如果你的表单条记录字段很多、总数据量过万,拉取全字段确实有明显性能开销,可以绕过DataStore的query方法,直接调用Amplify GraphQL API自定义查询语句,只请求id字段:
首先定义只返回id字段的GraphQL查询:
再通过Amplify API模块调用该查询,就能拿到仅包含id列的返回结果,不会传输其他冗余字段。query GetMyTableIdList { listMyTables { items { id } } }
注意:如果你的下拉菜单后续还要做分页、实时更新,优先沿用DataStore的查询能力搭配本地字段提取,不用额外维护自定义GraphQL逻辑,能避开很多后续数据同步不一致的问题。
内容的提问来源于stack exchange,提问作者BhavinT
相关产品推荐
相关产品推荐

