graphql - Apollo 客户端(React):可以从 Query 对象获取规范化数据吗?
问题描述
的Query.data
对象react-apollo
以嵌套形式提供数据,如下所示:
{
"findUser": [
{
"__typename": "User",
"id": "5a6efb94b0e8c36f99fba013",
"email": "Lloyd.Nikolaus@yahoo.com",
"posts": [
{
"__typename": "BlogPost",
"id": "5a6efb94b0e8c36f99fba016",
"title": "Dolorem voluptatem molestiae",
"comments": [
{
"__typename": "Comment",
"id": "5a6efb94b0e8c36f99fba019",
"message":
"Alias quod est voluptatibus aut quis sunt aut numquam."
},
{
"__typename": "Comment",
"id": "5a6efb94b0e8c36f99fba01b",
"message": "Harum quia asperiores nemo."
},
{
"__typename": "Comment",
"id": "5a6efb94b0e8c36f99fba01c",
"message": "Vel veniam consectetur laborum."
},
{
"__typename": "Comment",
"id": "5a6efb94b0e8c36f99fba01e",
"message":
"Possimus beatae vero recusandae beatae quas ut commodi laboriosam."
}
]
}
]
}
]
}
我有一个用例,我需要标准化形式的数据,如下所示:
{
"comments": {
"5a6efb94b0e8c36f99fba019": {
"id": "5a6efb94b0e8c36f99fba019",
"message": "Alias quod est voluptatibus aut quis sunt aut numquam."
},
"5a6efb94b0e8c36f99fba01b": {
"id": "5a6efb94b0e8c36f99fba01b",
"message": "Harum quia asperiores nemo."
},
"5a6efb94b0e8c36f99fba01c": {
"id": "5a6efb94b0e8c36f99fba01c",
"message": "Vel veniam consectetur laborum."
},
"5a6efb94b0e8c36f99fba01e": {
"id": "5a6efb94b0e8c36f99fba01e",
"message":
"Possimus beatae vero recusandae beatae quas ut commodi laboriosam."
}
},
"blogPosts": {
"5a6efb94b0e8c36f99fba016": {
"id": "5a6efb94b0e8c36f99fba016",
"title": "Dolorem voluptatem molestiae",
"comments": [
"5a6efb94b0e8c36f99fba019",
"5a6efb94b0e8c36f99fba01b",
"5a6efb94b0e8c36f99fba01c",
"5a6efb94b0e8c36f99fba01e"
]
}
},
"users": {
"5a6efb94b0e8c36f99fba013": {
"id": "5a6efb94b0e8c36f99fba013",
"email": "Lloyd.Nikolaus@yahoo.com",
"posts": ["5a6efb94b0e8c36f99fba016"]
}
}
}
看到 Apollo 已经以规范化形式缓存数据的持久性,有没有办法以规范化形式访问相关响应数据,而不使用像graphql-normalizr库那样的单独规范化过程?
如果可能的话,我想避免双重标准化的开销。
解决方案
您应该能够读取缓存中的展平数据client.readFragment()
看看这里的文档: https ://www.apollographql.com/docs/react/advanced/caching.html#readfragment
推荐阅读
- drake - drake build 和“来自 pydrake.all 导入”的问题
- python - 如何创建一个类型“等于”int的类?
- mongodb - 如何有效地在 mongodb 中找到非唯一键值文档?
- node.js - 已解决:如何在 NodeJS 中使用 Firebase 管理员将未来日期存储在 Firestore 中?
- quarkus - 如何在 docker run 命令行上覆盖 quarkus.security.users.embedded.users?
- ruby - Sinatra 启动应用程序中的 MIME 类型错误
- reactjs - 如何为 axios 请求构建完整的授权标头?
- sockets - (Socket.io) 我应该如何优化命名空间的数量?
- java - 如何使用 JAVA 从 REST API 调用中打印/读取图像
- javascript - 在javascript上按日期读取文件名