React + urql Graphcache:执行Mutation后如何失效指定类型所有实体
如何在urql Graphcache中执行Mutation后失效指定类型的所有实体
正确实现代码
{ // 其他配置项 updates: { Mutation: { delete_all_todos: (_result, _args, cache) => { // 失效所有类型为Todo的实体 cache.invalidate({ __typename: 'Todo' }); }, }, }, }
关键说明
- 注意类型名大小写:GraphQL规范中类型名默认采用大驼峰格式(比如
Todo),而非小写的todo,务必和你的GraphQL Schema定义保持一致,这是最容易踩的坑。 - 批量失效的作用:调用
cache.invalidate({ __typename: 'Todo' })会直接标记该类型下的所有实体为失效状态,后续相关查询触发时,Graphcache会自动舍弃旧缓存、从服务器拉取最新数据,无需手动清理关联的查询缓存。 - 场景适配性:对于
delete_all_todos这类批量删除操作,直接失效整个类型的实体是最高效的方案,不需要额外处理查询缓存的更新逻辑。
额外注意
- 该方式适用于urql v2及以上版本的Graphcache。
- 失效操作会自动触发所有依赖该类型数据的查询重新请求,确保界面数据与后端一致。
内容的提问来源于stack exchange,提问作者user3690467
相关产品推荐
相关产品推荐

