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
作为我的桌子的旋转器),但我想要旋转器仅在修改的行上,直到重新获取完成。
有一种方法可以通过自动重新获取来做到这一点,或者这是我必须手动更新缓存才能获得我想要的行为的场景之一?
这应该是你的答案:
弗里本人:
不。RTK-Query 是文档缓存(完整响应 = 文档),而不是标准化缓存。它对缓存响应的内容及其结构一无所知——并且它永远不会尝试自己在其中“缝合”任何内容。
您可以通过乐观更新手动执行此操作,但 RTK-Q 自动执行的所有操作都是重新获取,这在大多数用例中应该足够了。
归档时间: |
|
查看次数: |
504 次 |
最近记录: |