我对GraphQL和Apollo还是很陌生,但是最近三年来我一直在将Redux和React一起使用。基于Apollo文档,他们鼓励开发人员将其用作事实的唯一来源:
我们希望能够访问布尔标志和来自的设备API结果 应用中包含多个组件,但不想维护一个单独的组件 Redux或MobX存储。理想情况下,我们希望将Apollo缓存作为 客户端应用程序中所有数据的唯一真实来源
我正在尝试找出与Apollo一起复制Redux所允许的方式。在我的应用程序中,我有“标签”,即一组对象,每个对象都有接近15个不同的字段。它们在我的应用程序的3个不同部分中使用,每个部分都显示特定的“标签”以及“标签”中的特定字段。基于此,我使用Redux处理此问题的方法是从我的API中获取“标签”,然后在reducer中,创建包含每个部分所需的特定“标签”的ID的不同数组,并且我还将创建包含原始数据的地图(ID,值)。就像这样:
const tags = new Map(); //(tagId, tag) containing all the tags
const sectionATags = []; // array of ids for section A tags
const sectionBTags = []; // array of ids for section B tags
const sectionCTags = []; // array of ids for section C tags
我的目标是复制相同的行为,但是即使它们鼓励您使用Apollo管理您的本地状态,我也不确定我想实现的目标是否可以简单的方式 ,或者使用Apollo进行良好实践。我一直在遵循文档中的this example,它们的主要作用是通过扩展查询或使用@client
指令对缓存的数据进行突变,来向从服务器接收的数据添加或删除额外的字段。 / p>
同时,我了解GraphQL旨在查询所需的特定数据,而不是典型的REST请求,在该请求中,无论是否需要,您都将获得包含所有数据的大JSON,但是好像在这种情况下用我每个部分需要的特定数据进行3个不同的查询效率不高。
我不确定是否遗漏了某些东西,或者认为Apollo被认为是“更简单的本地状态管理”。我要遵循正确的路径还是应该继续将Redux与另一个GraphQL库一起使用,该库仅允许我在没有管理层的情况下获取数据?
答案 0 :(得分:0)
Apollo具有标准化的缓存...您可以查询一次所有[任何地方都需要的字段]数据-后续/附加查询可以是“仅缓存”。不会再发出其他请求-如果所有必填字段均已存在,这是安全的。
转换数据结构...通常不需要,我们正在处理所需的数据[和形状](“不是后端问题”)。您可以:
常见应用状态可以留在redux中-数据获取应在阿波罗中。