Как добавить заголовки к конечным точкам в плагине RTK-Query?

Попытки следовать довольно скудному руководству на официальной странице меня далеко не уводят.

По сути, я пытаюсь добавить определенный заголовок на основе параметров вызова api, но я не знаю, как настроить для этого конечные точки.

5 ответов

Все, что ты return с вашей конечной точки query функция будет передана в качестве первого аргумента вашему baseQuery. Так что, если вы используете, вам нужно взглянуть на это.

Как правило, baseQuery, созданный fetchBaseQuery принимает все варианты, которые нормальный fetch звонок примет - включая headers поле.

Итак, у вас будет что-то вроде

      myEndpoint: build.query({
  query(args) {
    return {
      url: "foo",
      headers: { myHeader: args.blup }
    }
  }
})

должен сделать свое дело.

Обычно, помимо «разреженного руководства», при прокрутке вниз появляется еще около 25 страниц документации, но даже в этом случае сложно охватить все, поскольку RTK-Query довольно гибок.

Вы можете узнать больше о fetchBaseQuery в документации здесь: https://redux-toolkit.js.org/rtk-query/api/fetchBaseQuery#using-fetchbasequery

Ответ @phry не работает в моем случае. Проверяя документы, в моем случае это помогает решить проблему CORS:

      baseQuery: fetchBaseQuery({ 
        baseUrl: '.....',
        prepareHeaders: (headers, { getState }) => {
            headers.set('Access-Control-Allow-Origin', '*')
            return headers
        }
    }),

Вы можете использовать prepareHeaders. Это сработало для меня.

      createYourEndPoint: builder.mutation({
    query: (body) => ({
      url: `youEndPoint`,
      method: "POST",
      body,
      prepareHeaders: (headers) => {
        headers.set("Content-Type", "multipart/form-data")
          return headers
      },
    }),
    invalidatesTags: ["YourEndPointTag"],
}),

Вы можете использовать prepareHeaders, который является вторым аргументомfetchBaseQueryчтобы настроить заголовок так, как вам нужно:

       `
  const baseQuery = fetchBaseQuery({
  baseUrl: "",
  prepareHeaders: (headers) => {
    headers.set("Content-type", "appliation/json"),
      headers.set("businessUnit", "EUS,MPS"),
      headers.set("auth-token", tokenService.getLocalAccessToken());
    return headers;
  },
});


 `

Вот мой собственный пример, предполагающий, что ваш запрос — getUserProfile, и вы извлекаете значения токена, userId и ваших пользовательских ключей заголовка из параметров запроса.

      getUserProfile: builder.query({
    query: (params) => ({
        url: `user/${params.userId}`,
        method: "GET",
        headers: {
            Authorization: `Bearer ${params.token}`,
            "your-custom-header": params.customKey
        },
    }),
}),
Другие вопросы по тегам