그동안은 axios를 그냥 import해서 사용했는데, 이렇게 useAxios()
커스텀 훅을 만들어서 사용하면 에러 처리나 baseUrl에 대한 전처리를 쉽게 해줄 수 있다.
useAxios.ts1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| import extra from "@utils/extra"; import axios, { AxiosError } from "axios"; import { useAtomValue } from "jotai"; import { useMemo } from "react";
const useAxios = () => { const user = useAtomValue(userAtom); const axiosInstance = useMemo(() => { const instance = axios.create({ baseURL: yourBackendBaseURL, }); instance.interceptors.request.use(async (config) => { const token = await yourToken; return { ...config, headers: { ...(config.headers ?? {}), Authorization: token, }, }; }); instance.interceptors.response.use(undefined, async (value) => { if (value instanceof AxiosError) { console.error( `AxiosError(${value.response?.status}/${value.code}): ${value.message}\n${value.response?.data}` ); } else { console.log(value.response); } return value; }); return instance; }, [user]); return axiosInstance; };
export default useAxios;
|