RTK 查询支持“isLoading”,以便在缓存失效后自动重新获取

fla*_*aky 7 reactjs rtk-query

很难找到这个问题的好的答案/解决方案。

我有一个帖子列表组件,允许删除单个帖子行。

我正在使用常规queryMutation方法进行删除:

执行

deletePostById: build.mutation<{ success: boolean; id: number }, number>({
  query(id) {
    return {
      url: `post/${id}`,
      method: 'DELETE',
    }
  },
  invalidatesTags: (result, error, id) => [{ type: 'Posts', id }],
})
Run Code Online (Sandbox Code Playgroud)

用法

  const [deletePost, { isLoading: isDeleting, error: deletionError }] = useDeletePostByIdMutation();
Run Code Online (Sandbox Code Playgroud)

问题描述
在列表组件中,单个行有一个用于删除该帖子的图标 - 当isDeleting我显示一个微调器时,它也显示得很好 - 但是,当删除帖子时,RTKQ 的自动重新获取会启动以获取现在从服务器更新的帖子 -isDeleting但不再正确。这会留下一个小时间窗口,其中“帖子”行不显示任何微调器,但也尚未从“帖子”列表中删除。

一旦所有帖子的重新获取数据成功返回,已删除的帖子行将从列表中删除。


如何维持旋转动画从删除单个帖子到 RTKQ 自动重新获取完成后删除为止?


谢谢

phr*_*hry 4

您可以使用isFetchingon 列表查询代替isLoading,这仅适用于初始请求,不适用于重新获取。

  • 我遇到了同样的问题,即我想保留 UI 反馈,直到重新获取完成。我很难在这里得到答复。使用 isFetching 有助于不使用整个列表的微调器,但无助于使我要删除的单行使用微调器,直到删除完成。@phry我误解了你的答案吗? (4认同)
  • 列表的获取发生在突变完成之后,这只是一个副作用 - 它们彼此不相关。您所能做的就是查看列表本身的“isFetching”。 (2认同)