#reactjs #redux #axios
#реагирует на #возвращение #аксиос
Вопрос:
Я стараюсь работать с перехватчиками Axios. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу показать ответ, полученный от API с помощью Axios, или даже если это так, он показывает постоянные данные.
axios.defaults.baseURL = 'https://localhost:5001/api/'; axios.defaults.withCredentials = true; const responseBody = res =gt; res.data; axios.interceptors.response.use(async response =gt; { const pagination = response.headers["x-pagination"]; if (pagination) { const parsed = JSON.parse(pagination); let metaData = { currentPage: parsed.currentPage, pageSize: parsed.pageSize, totalPages: parsed.totalPages, totalCount: parsed.totalCount }; response.data = { metaData, data: response.data //I want to change this data // For example there is an endpoint named getAll and it returns all object // Also there is a get endpoint and it returns a single object // But the problem is axios always return getAll endpoint's data. }; return response; } }, error =gt; { return Promise.reject(error); });
Это мой объект запроса
const requests = { get: (url, params) =gt; axios.get(url, {params}).then(responseBody), post: (url, data) =gt; axios.post(url, data).then(responseBody), put: (url, data) =gt; axios.put(url, data).then(responseBody), delete: (url) =gt; axios.delete(url).then(responseBody), postForm: (url, data) =gt; axios.post(url, data, { headers: { 'Content-Type': 'multipart/form-data' } }).then(responseBody), putForm: (url, data) =gt; axios.put(url, data, { headers: { 'Content-Type': 'multipart/form-data' } }).then(responseBody) };
и это мои конечные точки API
const Endpoints = { getAll: () =gt; requests.get('Endpoint'), get: (id) =gt; requests.get(`Endpoint/${id}`), create: (data) =gt; requests.postForm('Endpoint', data), update: (id, data) =gt; requests.putForm(`Endpoint/${id}`, data), delete: (id) =gt; requests.delete(`Endpoint/${id}`), }
Что я упускаю? Кроме того, я использую Redux Slice. Если вы хотите, я также могу отправить код исправления, который я пишу.
Ответ №1:
axios.interceptors.response.use(async response =gt; { const pagination = response.headers["x-pagination"]; if (pagination) { const parsed = JSON.parse(pagination); let metaData = { currentPage: parsed.currentPage, pageSize: parsed.pageSize, totalPages: parsed.totalPages, totalCount: parsed.totalCount }; response.data = { metaData, data: response.data }; return response; } return response; // problem solved after this }, error =gt; { return Promise.reject(error); });
Проблема в том, что я забываю вернуть ответ, поэтому я всегда получаю одни и те же данные.