Ошибка запроса RTK / ошибка isError / isSuccess не обновляются

#rtk-query

#rtk-запрос

Вопрос:

Я пытаюсь использовать error / isError для проверки, не удался ли запрос, но он всегда не определен.

Это мой сервис (я установил URL на: «non_exists_url»)

 import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react' import {  ICompanyDeleteRequest,  ICompanyDeleteResponse } from '../../interfaces/companies.interface' import { RootState } from '../redux/store'  export const companyApi = createApi({  reducerPath: 'companyApi',  baseQuery: fetchBaseQuery({  baseUrl: 'http://localhost:1000/v1/',  prepareHeaders: (headers, { getState }) =gt; {  const token = (getState() as RootState).authReducer.token  if (token) {  headers.set('authorization', `Bearer ${token}`)  }  return headers  },  }),  endpoints: (builder) =gt; ({  deleteCompany: builder.querylt;ICompanyDeleteResponse, ICompanyDeleteRequestgt;({  query: ({ companyId }) =gt; ({  url: `non_exists_url`,  method: 'DELETE',  headers: {  'X-CompanyId': companyId,  },  }),  })  }), })  export const { useDeleteCompanyQuery } = companyApi  

И это находится внутри компонента:

 import styles from './deleteCompany.module.scss' import { FC, useEffect, useState } from 'react'  export const DeleteCompany: FC = () =gt; {   const companyId = 1  const { data, error, isError } = useDeleteCompanyQuery(companyId)   useEffect(() =gt; {  console.log('data', data)  console.log('error', error)  console.log('isError ', isError )  }, [data, error, isError ])   return (  lt;divgt;  Some text  lt;/divgt;  ) }  

В сети инструментов разработчика я вижу ошибку 404 Но в консоли ошибка и ошибка не определены

Есть идеи, чего мне не хватает ?

Комментарии:

1. Вы завернули api в свой редуктор? У меня однажды была похожая проблема, и это было потому, что я забыл добавить в свой рутрЕдуктор

2. Да, я завернул его.

3. Я думаю, это связано с тем, что 404 возвращает HTML, а RTK пытается его разобрать и застрял.

4. попробуйте добавить responseHandler: (response) =gt; response.text() в соответствии с вашим запросом. Если это не сработает, я предлагаю вам опубликовать эту проблему на странице RTKQ github, там вы сможете получить более быстрый и точный ответ

5. Спасибо, я добавил это: « ResponseHandler: (ответ: Ответ) =gt; { console.log(‘ответ’, ответ) возвращает новое обещание(асинхронное (разрешение) =gt;gt; разрешение(ожидание ответа.текст ()))}`, » И я вижу в ответе response.status === 404, но все равно не получаю его с помощью крючка

Ответ №1:

Я обнаружил, что вместо этого использовал мутацию запроса для операции удаления. Запрос ожидает получить функцию JSON / text / или обратного вызова в качестве ответа, но ошибка 404 возвращает HTML, который не может быть проанализирован как JSON.

В итоге я перешел на такую мутацию:

В служебном файле:

 deleteCompany: builder.mutationlt;ICompanyDeleteResponse, ICompanyDeleteRequestgt;({  query: ({ companyId }) =gt; ({  url: `PreventDelete/companies`,  method: 'DELETE',  }),  })  

Использование его в компоненте:

 const [deleteCompany, { data, error, isLoading }] = useDeleteCompanyMutation()  useEffect(() =gt; {  console.log('data', data)  console.log('error', error)  console.log('isLoading', isLoading)  if (!error amp;amp; data) {  NotificationManager.success('Deleting company success', `Company ${company.id} deleted successfully`)  } else if (error) {  NotificationManager.error('Delete company error', `Error deleting company ${company.id}, details: ${data}`)  }  }, [data, error, isLoading])