36
loading...
This website collects cookies to deliver better user experience
npx create-react-app apihook --template typescript
export type TApiResponse = {
status: Number;
statusText: String;
data: any;
error: any;
loading: Boolean;
};
export type TApiResponse = {
status: Number;
statusText: String;
data: any;
error: any;
loading: Boolean;
};
export const useApiGet = (url: string): TApiResponse => {};
import { useState } from 'react';
export type TApiResponse = {
status: Number;
statusText: String;
data: any;
error: any;
loading: Boolean;
};
export const useApiGet = (url: string): TApiResponse => {
const [status, setStatus] = useState<Number>(0);
const [statusText, setStatusText] = useState<String>('');
const [data, setData] = useState<any>();
const [error, setError] = useState<any>();
const [loading, setLoading] = useState<boolean>(false);
};
import { useState } from 'react';
export type TApiResponse = {
status: Number;
statusText: String;
data: any;
error: any;
loading: Boolean;
};
export const useApiGet = (url: string): TApiResponse => {
const [status, setStatus] = useState<Number>(0);
const [statusText, setStatusText] = useState<String>('');
const [data, setData] = useState<any>();
const [error, setError] = useState<any>();
const [loading, setLoading] = useState<boolean>(false);
const getAPIData = async () => {
setLoading(true);
try {
const apiResponse = await fetch(url);
const json = await apiResponse.json();
} catch (error) {
}
};
};
import { useState } from 'react';
export type TApiResponse = {
status: Number;
statusText: String;
data: any;
error: any;
loading: Boolean;
};
export const useApiGet = (url: string): TApiResponse => {
const [status, setStatus] = useState<Number>(0);
const [statusText, setStatusText] = useState<String>('');
const [data, setData] = useState<any>();
const [error, setError] = useState<any>();
const [loading, setLoading] = useState<boolean>(false);
const getAPIData = async () => {
setLoading(true);
try {
const apiResponse = await fetch(url);
const json = await apiResponse.json();
setStatus(apiResponse.status);
setStatusText(apiResponse.statusText);
setData(json);
} catch (error) {
setError(error);
}
setLoading(false);
};
};
import { useState, useEffect } from 'react';
export type TApiResponse = {
status: Number;
statusText: String;
data: any;
error: any;
loading: Boolean;
};
export const useApiGet = (url: string): TApiResponse => {
const [status, setStatus] = useState<Number>(0);
const [statusText, setStatusText] = useState<String>('');
const [data, setData] = useState<any>();
const [error, setError] = useState<any>();
const [loading, setLoading] = useState<boolean>(false);
const getAPIData = async () => {
setLoading(true);
try {
const apiResponse = await fetch(url);
const json = await apiResponse.json();
setStatus(apiResponse.status);
setStatusText(apiResponse.statusText);
setData(json);
} catch (error) {
setError(error);
}
setLoading(false);
};
useEffect(() => {
getAPIData();
}, []);
return { status, statusText, data, error, loading };
};
data
loading
from the response to avoid multiple print during the process:import React from 'react';
import logo from './logo.svg';
import './App.css';
import { useApiGet, TApiResponse } from './hooks/useApiHook';
function App() {
// call to the hook
const data: TApiResponse = useApiGet(
'http://www.omdbapi.com/?s=Guardians&apikey=xxxxxxxx'
);
// print the output
if (!data.loading) console.log(data);
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>
Edit <code>src/App.tsx</code> and save to reload.
</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer">
Learn React
</a>
</header>
</div>
);
}
export default App;
npm start