Fix useApi to not return a new axios instance every render #20
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
useApi
creates and returns a newaxios
instance every render. This makes it unusable as auseEffect
dependency which is unfortunate when working in a project that uses the recommended exhaustive-deps lint rule.For example:
The above code works fine. But in a project that uses
exhaustive-deps
, you will be forced to add inapi
in the array. That is a problem since it triggers never ending API requests.The way we deal with this is to just leave out
api
from the dependency array and add// eslint-disable-next-line react-hooks/exhaustive-deps
above. This does work but is not ideal in my opinion, especially when there are other dependencies that we have to remember to include.Solution
useApi
can just maintain one instance ofaxios
and return that one non-changing instance.