export function useQuery(url) { const [error, setError] = useState(false); const [loading, setLoading] = useState(true); const [serverData, setServerData] = useState({ name: "" }); const loadData = useCallback(() => { setLoading(true); setError(false); fetch(url) .then((result) => result.json()) .then((data) => { setServerData(data); setLoading(false); }) .catch(() => setError(true)); }, [url]); return { error, loading, data: serverData, loadData }; } export function MyRenderingComponent() { const { error, loading, data, loadData } = useQuery( "https://brunosabot.dev/api/hello/" ); useEffect(loadData, []); if (error) return <div>An error has occurred</div>; if (loading) return <div>Loading...</div>; return <div>{values.data.name}</div>; }