疑惑Apollo Client 3未配置字段策略时returnPartialData仍生效的原因
原因解析
- 默认缓存规范化机制
Apollo Client 3.x默认开启缓存规范化,会自动为所有查询返回的对象附加__typename字段,并用__typename + id作为唯一缓存键存储独立实体。你在搜索页执行SEARCH查询返回的每个Product类型商品,都会以Product:{id}为键单独存入缓存,而非仅作为搜索结果的嵌套数据存在。 - 单实体查询的默认读取规则
从@apollo/client 3.3版本开始,框架默认内置了单实体查询的缓存匹配逻辑:如果你的查询接收id作为入参,且返回类型的__typename和缓存中已存储的实体类型一致,Apollo会自动用入参id匹配对应缓存实体,无需额外配置缓存重定向/字段策略。 - returnPartialData的效果
你开启了returnPartialData配置,允许返回字段不完整的缓存数据。所以PRODUCT查询触发时,会先把缓存中已有的id、name、images、price字段组装成半完整数据返回,等服务端请求完成后再返回包含optionSetName、options等字段的完整数据,对应你控制台的两次输出。
内容的提问来源于stack exchange,提问作者jsindos
相关产品推荐
相关产品推荐

