Redux Toolkit查询轮询导致每次提取时重新呈现

8wigbo56  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(141)

数据没有改变,但是每次提取时组件都会重新呈现。我做了一些研究,找到了有关selectFromResult属性的信息,以便只访问数据本身,而不访问isFetching属性或其他属性
下面是我从apiSlice中得到的查询:

getNotification: builder.query<GetNotificationsResponse, GetNotificationsRequest>({
      query: ({ page, limit }) => ({
        url: `notifications?page=${page}&limit=${limit}`,
        method: 'GET',
      }),
    }),

下面是我如何使用轮询和selectFromResult

const result = useGetNotificationQuery(
    {
      page: 1,
      limit: 10,
    },
    {
      pollingInterval: 1000,
      selectFromResult: data => data.data,
    },
  );
c7rzv4ha

c7rzv4ha1#

注意,对selectFromResult的整个返回值执行浅相等性检查,以确定是否强制重新呈现。即,如果任何返回的对象值改变引用,则将触发重新呈现。如果创建了新数组/对象并将其用作回调内的返回值,它将由于每次运行回调时被标识为新项而妨碍性能益处。当有意提供空数组/对象时,为了避免在每次回调运行时重新创建它,您可以在组件外部声明一个空数组/对象,以保持稳定的引用。
我想这个链接会对你有帮助。
为了避免不必要的重新呈现,我们需要确保我们提取的任何数据都被正确地记忆。2为此,我们应该创建一个新的选择器示例,以便组件在每次呈现时都可以重用,这样选择器就可以记忆结果了。

相关问题