RTK 查询,在突变触发无效标签后管理表行上的微调器

Luc*_*bue 6 reactjs redux-toolkit rtk-query

我已经在我的一个项目中集成了 RTK 查询,并且我试图了解如何处理我的表的 UI。我已经阅读过其他 StackOverflow 问题(例如那个问题),但我无法找到我的用例的答案。

我的表格行对其有操作,因此用户可以直接从表格页面编辑或删除行项目。

我正在使用以下 RTK 查询挂钩:

// To fetch the data that populates the table. 
// 'isLoading' is used to show the spinner all over the table
const {data, isLoading} = useGetItemsQuery()

// To trigger the edit of the item.
const [triggerEditItem] = useEditItemMutation({fixedCacheKey: 'edit-item-' + data.id})

// To get when the editing is happening 
const [, {isLoading: isEditing}] = useEditItemMutation({fixedCacheKey: 'edit-item-' + data.id})
Run Code Online (Sandbox Code Playgroud)

这是我的切片:

serviceApi.injectEndpoints({
  endpoints: (builder) => ({
    getItems: builder.query({
      providesTags: [TAGS.ITEMS],
      query: // The query,
    }),

    editItem: builder.mutation({
      invalidatesTags: [TAGS.ITEMS],
      query: // The query,
    }),
})
Run Code Online (Sandbox Code Playgroud)

使标签editItem无效TAGS.ITEMS,因此重新获取getItems已完成。我这样做是因为我从文档中读到:

在大多数情况下,为了在触发后端更改后接收最新数据,您可以利用缓存标记失效来执行自动重新获取,这将导致查询在发生变化时重新获取其数据。被告知发生了突变,这将导致其数据过时。在大多数情况下,我们建议优先使用自动重新获取而不是手​​动缓存更新,除非您遇到需要这样做。

实现表行的组件使用我上面编写的第三个钩子,因此它可以相应地显示和隐藏微调器。

我的问题是,当我由于无效标签而重新获取时,我不想让旋转器遍布整个桌子(即我不想使用布尔值isFetching作为我的桌子的旋转器),但我想要旋转器仅在修改的行上,直到重新获取完成。

有一种方法可以通过自动重新获取来做到这一点,或者这是我必须手动更新缓存才能获得我想要的行为的场景之一?

Abd*_*yev 0

这应该是你的答案:

Redux RTK 查询:仅使列表中的单个元素无效

弗里本人:

不。RTK-Query 是文档缓存(完整响应 = 文档),而不是标准化缓存。它对缓存响应的内容及其结构一无所知——并且它永远不会尝试自己在其中“缝合”任何内容。

您可以通过乐观更新手动执行此操作,但 RTK-Q 自动执行的所有操作都是重新获取,这在大多数用例中应该足够了。