Source

utils/Hooks/useAxios.jsx

import { useEffect, useState } from 'react'
import axios from 'axios'

/**
 * Hook to fetch data from enpoint(s), using axios. 
 * @name useAxios
 * @param {Array<string>} enpoints - api 's enpoint(s)
 * @returns {Object} the data, error and loading state in an object 
 * @function
 */
export default function useAxios([...enpoints]) {
	const [data, setData] = useState(null)
	const [loading, setLoading] = useState(true)
	const [error, setError] = useState(null)

	useEffect(() => {
		axios
			.all(enpoints.map((endpoint) => axios.get(endpoint)))
			.then(axios.spread(({data: USER_MAIN_DATA}, {data:USER_AVERAGE_SESSIONS}, {data:USER_PERFORMANCE}, {data:USER_ACTIVITY}) => {
				setData({USER_MAIN_DATA, USER_AVERAGE_SESSIONS, USER_PERFORMANCE, USER_ACTIVITY})
			}))
			.catch((err) => {
				setError(err)
			})
			.finally(() => {
				setLoading(false)
			})
	}, [])

	return { data, error, loading }
}