【问题标题】:How do I implement the axios API query params like this?如何实现这样的 axios API 查询参数?
【发布时间】:2021-06-20 18:46:11
【问题描述】:

第一次发现这样的API,params key里面的form是个数组但可能不是数组,在axios中是怎么实现的?

{baseUrl}/list?filter[v3_p.name]=Package Data&filter[pro.name]=Indosat&filter[pp.category]=Voucher&filter[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('&')
      }
    });
    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,
    });
  }
};

我没有在任何文档中得到它,希望在这里得到答案! 谢谢你

【问题讨论】:

    标签: javascript reactjs api axios


    【解决方案1】:

    您可以使用qs.stringify 来序列化参数。您应该将config 对象作为第二个参数传递给axios.get

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

    一个建议:您可以使用 axios.defaults.baseURL 设置 API 基本 URL 或创建一个 custom axios instance 并对其进行配置以避免在每次调用中都输入它。

    // 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 }),
    })
    
    

    【讨论】:

    • 我用过,但它的 API url 只读取 {baseUrl}/list 没有任何参数 filter[]=value ...
    • @Fery1320 抱歉,不确定您的意思。当你使用qs.stringify 序列化参数时会发生什么?
    猜你喜欢
    • 2018-04-14
    • 1970-01-01
    • 2019-04-29
    • 2017-09-12
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    相关资源
    最近更新 更多