【问题标题】:Why is the purpose of "extraRootIds" in apollo cache为什么阿波罗缓存中“extraRootIds”的目的是
【发布时间】:2021-08-20 15:56:07
【问题描述】:

我在一个项目上工作:React / Apollo Client。 当我想在突变后更新缓存(在添加新对象的情况下)时,我在 apollo 开发工具中看到一个名为“extraRootIds”的元素

create({
                variables: { object: film },
                update: (cache, { data }) => {
                    const entity = data.insert_film_one;
                    cache.modify({
                        fields: {
                            search_film: (existingEntityRefs, { readField }) => {
                                const newEntityRef = cache.writeFragment({
                                    id: 'film:{"film_id":' + entity.film_id + '}',
                                    data: entity,
                                    fragment: FILM_CREATE_FIELDS
                                });
                                return [...existingEntityRefs, newEntityRef];
                            }
                        }
                    });
                }
            });

一切似乎都很好,但我想知道这个 extrarootIds 是否正常。

谢谢 ;)

【问题讨论】:

    标签: reactjs apollo-client


    【解决方案1】:

    我并不完全确定自己,因为我是 Apollo Client 的初级用户,我找不到明确的文档。搜索源代码虽然你可以看到它是在哪里定义的:

    public extract(): NormalizedCacheObject {
    const obj = this.toObject();
    const extraRootIds: string[] = [];
    this.getRootIdSet().forEach(id => {
      if (!hasOwn.call(this.policies.rootTypenamesById, id)) {
        extraRootIds.push(id);
      }
    });
    if (extraRootIds.length) {
      obj.__META = { extraRootIds: extraRootIds.sort() };
    }
    return obj;
    

    }

    https://github.com/apollographql/apollo-client/blob/cbcf951256b22553bdb065dfa0d32c0a4ca804d3/src/cache/inmemory/entityStore.ts#L276

    getRootIdSet() 返回的位置:

    由该层/根在其下的任何层/根保留的所有 ID 字符串的集合。

    因此,对于缓存的元存储中显示的内容似乎没有任何辨别力。我们可能应该假设他们将每个新更改的缓存 ID 保存在那里以供自己内部使用。

    【讨论】:

      猜你喜欢
      • 2018-05-06
      • 1970-01-01
      • 2020-07-17
      • 2021-08-01
      • 2013-02-02
      • 2021-12-28
      • 2017-10-15
      • 2020-11-17
      • 2019-08-31
      相关资源
      最近更新 更多