Introduction
In modern web development, making HTTP requests is a fundamental task. Whether you're fetching data from a server, submitti...
For further actions, you may consider blocking this person and/or reporting abuse
Hmmm, so let's see about this: The current
axios
NPM package weighs 2MB. In exchange for adding a significant chunk of those 2MB, we get things like errors on HTTP non-OK responses, which is bad for me (and I bet others) because, for example, I want to collect the body respones for HTTP 400 responses to provide the feedback to users. HTTP response 401 is another example: I need it in order to redirect the user to a login screen.Sure, I can always do a
catch
. But, withfetch
, which costs 0 bytes and is also available in Node, I don't need thecatch
. I merely need to do aswitch
on thestatusCode
property, or anif
on theok
property.Now, interceptors. Do I download 2MB to get a JSON token added to the header? Or do I do this?
"But then you'll have to do it for every data-retrieving function you have!" Eh, nope. Basic programming principles applied, I just create a
myFetch
function, a wrapper of the stockfetch
function that injects the token every time, with just a couple hundred bytes. Response interception? Same thing.So, is really
axios
a necessary, or even attractive enough package? Not all. Not for me, anyway. It adds very little value, IMHO.When
axios
was first being written fetch wasn't in the spec and then took a while to be everywhere. We had to use XMLHttpRequest everywhere and that really wasn't a nice experience.Axios
these days just usesfetch
directly, though does still have XMLHttpRequest as a fallback.All this to say I understand why
axios
exists and when people like something it tends to survive a long time even if it's not really needed anymore. I personally always usefetch
directly.Likewise, but I use nextjs, so I get all benefits of axios without even using it.
Why isn't axios needed for nextjs?
Axios is 2MB? Can you share more info?
bundlephobia.com/package/axios@1.7.2
A minified gzipped version is only 13.2KB. No one is going to serve unminified ungziped version in their production.
Secondly axios is tree shakable, means only the required exports are being bundled, if the bundlers are configured properly.
I so prefer using fetch over axios, but the facts provide should be fair and not manipulated. Do people care for a 13.2KB, depends on the project and management.
npmjs.com/package/axios
That says 2MB. True, I did not realize until now that it is unpacked size. Still, the 2MB is there. I'm not trying to manipulate anybody.
The same argument can be brought against majority of other packages too. Vue is 2.2MB unpacked. Vanilla Js is just 0 MB. What does Vue do which can’t be done with vanilla js?
Now you're just being extremist, or you're missing the point entirely. One can forego the need of axios with very few additions that weigh very little; what Vue does for the developer is night and day: It allows control of the DOM declaratively. Vanilla JS doesn't have this capability. Therefore your argument is definitely false, and even misleading.
13KB is not big deal also high chance is it will be serve from some cdn so user experience won't be that bad.
I hear you. Still, 0B is better, or say 1 or 2 KB uncompressed of "infrastructure" code overhead. Basically, my point is that axios WAS a good thing. Now the standard caught up and axios should be a thing of the past.
Fetch cannot still replace upload or download progress offered by axios.
This doesn't seem to be the case anymore. The fetch-api-progress NPM package, which only weights 17kb uncompressed, not 2MB, provides progress report for
fetch
.Needing a third party library again defeats the purpose. Axios handles it better and battle tested.
LOL. Isn't
axios
a third party library? Let it go, letaxios
rest in peace.Then provide an example of doing upload progress with fetch without using any external libraries. 😂
Bro, the point of the argument is not "zero libraries". The point of the argument is that fetch can do everything axios can, that you don't need axios anymore, that even if you have to add a 20kb library for upload progress, axios is still dead weight. That's the argument, and an argument that cannot be refuted.
I already said you axios can still do more things that fetch. If you want to use some random unknown, less used package to patch fetch and make it do things you can. For the time being axios is way more reliable and known and stable than some patchy library. When fetch equals axios, I'd happily switch over.
More things? Enumerate them here. Tell me, exactly, what things axios can do that fetch cannot cover. We already went through some and I have demonstrated that fetch can do them either by itself, or by bringing a small package to the picture.
"way more reliable". Where are the metrics for this? Show me metrics.
In the end, you can do what you want. You're clearly not understanding anything and have a closed mind. Really, try fetch() out even just for fun. That should clear your head.
I already use fetch for many usecases. LOL. You are the one here with blind eyes and blind hate to axios. You need metrics for popularity of axios? Compare the poplularity of the fancy library you suggested with axios. The difference will be like an elephant and an ant.
Didn’t you stupidly state axios bundles and send 2MB in payload? 🤣 That was your “best argument” against axios. 😂😂
Couldn't it be that perhaps very few people need progress upload? Or are you saying that everyone downloading axios are in fact using progress upload? That's some f'd up logic.
There could be many reasons why people don't don't download that NPM package and there could be many other reasons why people download axios.
Feel free to keep commenting nonsense. It entertains me.
Your nonsense entertains me as well. You made a blanket statement axios is dead forever. Go touch some grass. 🤣 You claimed fetch can do everything, I proved it can’t. They you are like “well, there is some third party library for it”. Exactly that was what I said, and axios is one of those 3rd party library. 😂 Axios is way popular than you at the very least. 😂
You know when someone has lost an argument by the number of emoji they use. Emoji are that: Emotion. You are out of arguments and are only left with emoji, to try to appeal to my emotion.
Is logic and reasoning too hard for you? I'm sorry. If you can't understand English, maybe I can try to translate it for you? Let me know. I'll try to help before you run out of emojis.
Yes please translate in note less than 200 pages. Keep your word if you are a man. Waiting to learn from your 200 page learning document.
Do you want emojis in the document? You know, just so you understand it better. Just asking. 😄
Yes please if that is not difficult for you. When can I expect it btw? 😂🤡
Well, I need to get acquainted with the emoji system you seem to understand so well. It is kind of difficult for me because I have never written emotional pieces, but hang in there! Be sure to follow me so you don't miss it!!
Oh, that’s bad! I thought you were great and amazing! My hopes have shattered. You are not good in adding emotions to your words, or even not acquainted in using emojis.
Alas! I cannot follow a man who canst keepth his troth! Thou must forbear thyself from scribing!
We've been using axios for all our API endpoints but all these comments have almost convinced me to change to fetch 😅 We're building a social network and performance really matters
i'm switching to fetch right away
the thing sir you saying about wrapper then you have to pass everything down to that inner function .And more customization leads to cumbersome code. Axios defaults feature and less boilerplate code.
What's the complication of writing
myFetch()
instead offetch()
?? Where's the complication in that? If you're doing it after the fact, just do a mass Replace. You're done with all calls in 1 second. It is literally nothing the difference between writingfetch
andmyFetch
.Cumbersome code. Hmmm. I'm no axios user so maybe you can enlighten me. Bing's Copilot says this is a simple interceptor example to add an interceptor that injects a token:
That vs. my code. OMG!! What a shot in the foot axios is, if Copilot is correct.
Now, back to your comment: Are you saying that this is cleaner? Are you saying that this "cleanliness" from axios is unbeatable unless I write, say, 1MB worth of infrastructure code? Come on, really?
Hello ! Don't hesitate to put colors on your
codeblock
like this example for have to have a better understanding of your code 😎I really enjoy fetch. I removed Axios from my latest React project. I always prefer to depend as little as possible on third party packages.
I just learned the conversion from fetch to axios and changed some of the routes in my project to
axios - async and await
and here everyone says fetch is better
Thanks for the information.
Intestingly, I wrote similar article today :)
dev.to/rahulvijayvergiya/fetch-vs-...
Thank you for the information.
Great article!
Most times, I feel axios is overkill in most cases. Fetch serves fine
great information.
Dumb article. Best practice in the serverless and especially Edge runtime world, is just stick with web standard fetch(). Axios is a dinosaur and keep making breaking changes, just move off.
Excellent
Once again, Nextjs is very kind with us. We can achieve all the benefits of axios even using fetch API in Nextjs. Love You Nextjs. Nice article by the way.
You don't get that for free. Next is overwriting the native fetch with its own implementation, which, while likely smaller than Axios, is still part of the relatively large bundle size you will have in any Next app.
It would probably be better than trying to roll your own with React and Axios though!
Code can be enclosed within triple backticks to enable syntax highlighting in Dev.to
I suggest you to try npmjs.com/package/ky/v/0.9.0. It's way smaller than axios, but still covers the basics.