前端
PythonJava运维数据库
TanStack Query
TanStack Query
  • getting started
    • 快速开始
    • 开发工具
    • Typescript
    • 默认配置
    • 网络模式
  • Query
    • 查询
    • 查询键
    • 查询函数
    • 查询选项
    • 并行查询
    • 有依赖的查询
    • 查询状态指示器
    • 窗口聚焦重新获取数据
    • 禁用/暂停查询
    • 查询重试
    • 分页查询
    • 无限查询
    • 初始化查询数据
  • 占位符
  • Mutation
    • 修改 Mutations
    • 主动查询失效 Query Invalidation
    • 修改导致的失效 Invalidation From Mutations
    • 通过修改的数据更新查询内容
    • 乐观更新
  • 取消查询
  • 默认查询函数
  • 过滤器
  • Suspense
  • 缓存数据
  • Api Reference
    • QueryClient
    • QueryCache
    • MutationCache
    • QueryObserver QueriesObserver
    • InfiniteQueryObserver
    • FocusManager
    • NotifyManager
    • useQuery
    • useQueries useInfiniteQuery
    • useMutation
    • useIsFetching
    • useIsMutating
    • useMutationState
    • useSuspenseQuery
    • useSuspenseInfiniteQuery
    • useSuspenseQueries
    • QueryClientProvider
    • useQueryClient
    • queryOptions
    • infiniteQueryOptions
    • QueryErrorResetBoundary
    • useQueryErrorResetBoundary
    • hydration
由 GitBook 提供支持
在本页

这有帮助吗?

  1. Mutation

修改导致的失效 Invalidation From Mutations

变更(Mutation)导致的查询失效

使查询失效只是一半的工作,知道何时使查询失效才是另一半。通常,在应用中执行一个 mutation 成功后,很可能有相关的查询需要失效并重新获取数据,以反映变更后的最新状态。

🌰 例如,假设我们有一个新增待办事项的 mutation:

const mutation = useMutation({ mutationFn: postTodo });

当 postTodo 这个 mutation 成功执行后,我们很可能需要使所有 todos 相关的查询失效,并重新获取数据,这样 UI 才能展示最新的待办事项列表。

在 Mutation 成功后使查询失效

你可以使用 useMutation 的 onSuccess 回调,结合 invalidateQueries 方法来实现这一点:

import { useMutation, useQueryClient } from "@tanstack/react-query";

const queryClient = useQueryClient();

// 当 mutation 成功时,使 `todos` 和 `reminders` 相关的查询失效
const mutation = useMutation({
  mutationFn: addTodo,
  onSuccess: () => {
    queryClient.invalidateQueries({ queryKey: ["todos"] });
    queryClient.invalidateQueries({ queryKey: ["reminders"] });
  },
});

Mutation 触发查询失效的方式

你可以利用 useMutation 提供的各种回调钩子来控制查询失效的时机,包括:

  • onSuccess:Mutation 成功时触发查询失效(最常见)。

  • onSettled:Mutation 无论成功或失败都会执行,可用于确保查询状态更新。

  • onError:Mutation 失败时执行,通常用于错误处理,但也可以用于特定情况的查询失效。

你可以根据具体业务需求选择合适的方式来使查询失效。

上一页主动查询失效 Query Invalidation下一页通过修改的数据更新查询内容

最后更新于2个月前

这有帮助吗?