首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Urql缓存无效没有从缓存中删除项。

Urql缓存无效没有从缓存中删除项。
EN

Stack Overflow用户
提问于 2022-05-25 23:47:26
回答 1查看 651关注 0票数 1

我的应用程序有一个组织列表,我的UI中有按钮可以单独删除它们。

我希望列表更新和删除已删除的组织,但这不是我的工作。

我已经设置了这样的缓存交换,其中我(冗余地)尝试了来自Urql文档的两种缓存失效方法:

代码语言:javascript
复制
const cache = cacheExchange({
    updates: {
        Mutation: {
            delOrg(_result, args, cache, _info) {

                // Invalidate cache based on type
                cache.invalidate({ __typename: 'Org', id: args.id as number });

                // Invalidate all fields
                const key = 'Query';
                cache
                    .inspectFields(key)
                    .filter((field) => field.fieldName === 'allOrgs')
                    .forEach((field) => {
                        cache.invalidate(key, field.fieldKey);
                    });
            }
        }
    }
});

返回组织列表的GraphQL查询如下所示:

代码语言:javascript
复制
query AllOrgs {
    allOrgs {
        id
        name
        logo {
            id
            url
        }
    }
}

删除一个组织的突变看起来是:(它返回一个布尔值)

代码语言:javascript
复制
mutation DelOrg($id: ID!) {
    delOrg(id: $id)
}

cache.invalidate似乎什么也不做。我已经使用调试插件和console.log检查了缓存。我可以看到缓存中的记录,但它们不会被删除。

我在用

代码语言:javascript
复制
"@urql/exchange-graphcache": "^4.4.1",
"@urql/svelte": "^1.3.3",
EN

回答 1

Stack Overflow用户

发布于 2022-05-26 18:54:52

我找到了解决问题的办法。我现在使用cache.updateQuery来更新data,而不是一行,我现在有-

代码语言:javascript
复制
updates: {
        Mutation: {
            delOrg(_result, args, cache, _info) {
                if (_result.delOrg) {
                    cache.updateQuery(
                        {
                            query: QUERY_ALL_ORGS
                        },

                        (data) => {
                            data = {
                                ...data,
                                allOrgs: data.allOrgs.filter((n) => n.id !== args.id)
                            };
                            return data;
                        }
                    );
                }
            }
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72385225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档