Сначала я попытался установить 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?
Ссылка на библиотеку.