Запрос RTK — удаление кэшированных данных при добавлении cacheEntryAdded

В настоящее время у нас есть конечная точка API, которая запрашивает одну «Группу» через идентификатор.

У нас настроена подписка WebSocket, и в определении onCacheEntryAdded мы обрабатываем случаи, когда эта группа обновляется или удаляется.

Когда мы получаем сообщение об обновлении от веб-сокета, мы запускаем следующее:

updateCachedData((draft) => {
  draft = response;
}

Который обновляет запись, как и ожидалось.

Однако какой подход следует использовать, если мы хотим полностью удалить запись? После «удаления» сообщений из веб-сокета я бы предположил, что могу просто установить черновик как неопределенный, но, похоже, это не так.

10 вопросов на собеседовании по React js
10 вопросов на собеседовании по React js
Вопрос: Что такое React JS? Каковы преимущества использования React?
0
0
24
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
updateCachedData((draft) => {
  draft = response;
}

на самом деле здесь ничего не обновляется.

updateQueryResults имеет те же правила, что и produce из immer или обычные редьюсеры createSlice case: вы можете изменить объект в state (или draft в данном случае), но вы не можете переназначить саму переменную. Если вы хотите сделать это, вы должны

updateCachedData((draft) => {
  return response;
}

вместо.

Таким же образом вы можете

updateCachedData((draft) => {
  return null;
}

тоже, но это не удалит полную запись кэша, а только установит data на null. (undefined не сработает!)

Запись в кеше будет удалена только после того, как ее больше не будет использовать компонент (если ее не использовать с useQuery), а затем она будет удалена автоматически через 60 секунд.

Это работает блестяще, возвращая ноль в этом случае совершенно нормально :) Спасибо, как всегда, за ответ и спасибо за блестящий пакет :)

KwehDev 09.05.2022 14:10

Другие вопросы по теме

Похожие вопросы

Как использовать socketio внутри контроллеров?
Redux-toolkit: в магазине нет действительного редуктора
Redux Toolkit, пытается использовать фильтр в функции редуктора, но он ведет себя не так, как ожидалось
Почему? Аргумент типа «AsyncThunkAction<any, void, {}>» не может быть назначен параметру типа «AnyAction»
Массив сортировки не работает должным образом, когда некоторые элементы имеют неизвестные значения
Как я могу управлять действиями отправки в наборе инструментов Redux с помощью React Native?
Создание реферальной системы с использованием Node/React/MongoDB
Получение ошибки «Редуктор фрагмента для ключа« weathReducer »возвратил неопределенное значение во время инициализации в моем выставочном приложении»
Redux Toolkit: как я могу сохранить сериализованный создатель действий в состоянии?
Попытка рефакторинга приложения React для проблемы React-Redux с ползунком громкости