DEV Community

Cover image for Why you shouldn`t use axios interceptors with Redux
Kamil Fronczak
Kamil Fronczak

Posted on

7 1

Why you shouldn`t use axios interceptors with Redux

Hi folks. This is my first post here! I hope you will enjoy my thoughts of software best practices ๐Ÿ˜Š

What are the axios interceptors?

They are like simple middlewares which executes some logic before request and after responses. Interceptors are mostly used in authetication logic when we can attach some headers to every request.

axiosInstance.interceptors.request.use(
  config => {
    config.headers.authorization = store.get("authToken");
    return config;
  },
  error => Promise.reject(error)
);
Enter fullscreen mode Exit fullscreen mode

In react projects I often see that programmers couple redux actions with axios interceptors, so for example action loginUser can update state of store and assign authorization token to request interceptor, and on logoutUser can remove token from store and also from axios interceptors. Sounds fine? Then I will explain why not.

At first, they coupled axios and redux. Ok, butโ€ฆ why redux should know details about http client? And what if you want to change http client that not support interceptors? OR what if you want to use the same axios to request to another source? Do you really want to expose your auth headers? ๐Ÿค”

Ok ok, you MAYBE have rightโ€ฆ but whatโ€™s a good way to do it?

My propose to deal with it, is a magic thing called HoC. HoC is a good way to decouple your main logic from implementation details.

Your HoC can have redux state with some auth token. HoCcan dynamically set header for every request in your API Client/DataProvider without using interceptors, and then just pass your DataProvider to wrapped component, so your component can be now well tested with mocked DataProvider and without knowing anything about interceptors implementation.

The best source of HoC and example of data provider is in the official react docs https://en.reactjs.org/docs/higher-order-components.html but you can create something similar in almost every framework

What are your thoughts about interceptors with redux? I'd love to hear it!

Top comments (0)

11 Tips That Make You a Better Typescript Programmer

typescript

1 Think in {Set}

Type is an everyday concept to programmers, but itโ€™s surprisingly difficult to define it succinctly. I find it helpful to use Set as a conceptual model instead.

#2 Understand declared type and narrowed type

One extremely powerful typescript feature is automatic type narrowing based on control flow. This means a variable has two types associated with it at any specific point of code location: a declaration type and a narrowed type.

#3 Use discriminated union instead of optional fields

...

Read the whole post now!