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