@lexstile

Как на react-query без костылей затереть предыдущее значение, если следующий запрос вернул ошибку?

Сначала я попытался установить cacheTime = 0 (не помогло).
После чего, пытался сделать так (но, похоже, remove не затирает data):
const { data, isLoading, isError, refetch, remove } = useOrderQuery();

  useEffect(() => {
    if (isError) {
      remove();
    }
  }, [isError, remove]);

Затем, попробовал так (получилось, но выглядит костыльно):
export const useOrderQuery = () => {
  const queryClient = useQueryClient();

  const { tableUuid } = useParams();

  const orderQuery = useQuery([QUERY_KEYS.ORDER, tableUuid], () => apiOrder.get(tableUuid), {
    cacheTime: 0,
    onError(error) {
      if (error.response.status === 404) {
        // queryClient.cancelQueries({ queryKey: [QUERY_KEYS.ORDER, tableUuid] });
        // queryClient.resetQueries({ queryKey: [QUERY_KEYS.ORDER, tableUuid], exact: true });
        // queryClient.removeQueries({ queryKey: [QUERY_KEYS.ORDER, tableUuid], exact: true });
        queryClient.setQueryData([QUERY_KEYS.ORDER, tableUuid], null);
      }
    },
  });

  return orderQuery;
};

Как правильно можно решить данную проблему? (а решать мне требуется потому, чтобы не выводить список позиций в заказе. Можно, конечно, сделать проверку на ошибку, но считаю это большим костылем, чем нежели сделал через setQueryData)
И почему в этом случае не помогает cacheTime = 0?

Ссылка на библиотеку.
  • Вопрос задан
  • 160 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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