Как мне реализовать параметры запроса axios API таким образом?

#javascript #reactjs #api #axios

Вопрос:

Это первый раз, когда я нашел подобный API, форма в ключе params похожа на массив, но, возможно, это не массив и как он реализован в axios?

{baseUrl}/список?фильтр[v3_p.name]=Данные пакета и фильтр[pro.name]=Indosat и фильтр[pp.категория]=Ваучер и фильтр[pd.is_enable]=1

Мой код в axios выглядит так:

 export const filterProduk = (data) => async (dispatch) => {
  try {
    const params = { filter: data }
    const res = await axios.get(`${baseUrl}/list`, data, {
      params,
      paramsSerializer: function paramsSerializer(params) {
        return Object.entries(Object.assign({}, params, { filter: 'HIDDEN' })).map(([key, value]) => `${key}=${value}`).join('amp;')
      }
    });
    dispatch({
      type: FILTER_SUCCESS,
      payload: res.data.data
    });
  } catch (error) {
    dispatch({
      type: FILTER_FAILED,
      payload: error.response.data,
    });
  }
};
 

и я тоже пытался

 export const filterProduk = (data) => async (dispatch) => {
  try {
    const res = await axios.get(`${baseUrl}/list`, data, {
      params: {
        filter: [data.package, data.provider, data.category, data.is_enable]
      }
    });
    dispatch({
      type: FILTER_SUCCESS,
      payload: res.data.data
    });
  } catch (error) {
    dispatch({
      type: FILTER_FAILED,
      payload: error.response.data,
    });
  }
};
 

Я не получаю этого ни в какой документации и надеюсь получить ответ здесь!
Спасибо

Ответ №1:

Вы можете использовать qs.stringify для сериализации параметров. И вы должны передать config объект в качестве второго аргумента axios.get .

 axios.get(`${baseUrl}/list`, {
  params,
  paramsSerializer: (params) => qs.stringify(params, { encode: false }),
})
 

Предложение: Вы можете настроить базовый URL API с помощью axios.defaults.baseURL или создать пользовательский экземпляр axios и настроить его, чтобы не вводить его при каждом вызове.

 // axios.js

import axios from 'axios'

export default axios.create({
  baseURL: 'https://api.example.com'
})

// queries.js

import axios from './axios'

axios.get('/list', {
  params,
  paramsSerializer: (params) => qs.stringify(params, { encode: false }),
})

 

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

1. Я использовал его, но его URL-адрес API только для чтения {baseUrl}/список, в котором нет фильтра параметров[]=значение …

2. @Fery1320 Извините, не совсем понимаю, что вы имеете в виду. Что происходит, когда вы используете qs.stringify для сериализации параметров?