Axios 使用重复的参数打字稿

时间:2021-03-02 13:34:31

标签: javascript reactjs types axios

我正在使用一个无法再调整的现有后端。我需要打电话来获取所有消息。参数之一是类型,这可用于获取来自特定类型的所有消息。后端开发人员告诉我我必须多次使用它,如下所示:

<块引用>

/api/message?type=test&type=test2

所以我尝试将它作为数组发送,结果是:

<块引用>

/api/message?type[]=test&type[]=test2

找到一些关于 SO 的信息让我使用了 QS 但这也没有给我我需要的结果

<块引用>

api/message?type%5B0%5D=test&type%5B1%5D=test2

export const getMessages = () =>
  baseApi
    .get('/message', {
      params: {
        type: [
          'test',
          'test2'
        ]
      },
      paramsSerializer: (params) => {
        return qs.stringify(params)
      }
    })
    .then((r) => r.data as Message[])

2 个答案:

答案 0 :(得分:0)

您可以使用 append 方法。喜欢 (URLSearchParams):

const params = new URLSearchParams()
params.append("type","test")
params.append("type","test2")

然后,您像之前一样在请求中设置参数:

export const getMessages = () =>
  baseApi
    .get('/message', {
      params: {
        params
      },
      paramsSerializer: (params) => {
        return qs.stringify(params)
      }
    })
    .then((r) => r.data as Message[])

答案 1 :(得分:0)

这与 Axios 无关。 qs 库负责生成该字符串。查看它的 documentation

<块引用>

当数组被字符串化时,默认情况下它们是显式的 指数:

qs.stringify({ a: ['b', 'c', 'd'] });
// 'a[0]=b&a[1]=c&a[2]=d'

您可以通过将索引选项设置为 false 来覆盖它:

qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false });
// 'a=b&a=c&a=d'
相关问题