[Public-APIs 깃허브] : open API를 제공하는 사이트를 모아놓은 링크
rest-API를 연습할 수 있는 postman에서 미리 API를 사용해볼 수 있다.
[postman]
: 크롬 웹에서 실행하는 것을 권장! (데스크탑 앱은 글자가 깨지거나 버그가 있을 수 있다.)
axios 방식은 번거롭다..
그리고 useEffect 안에서 사용해야 하므로 화면이 한번 다 렌더되고 나서 실행된다는 단점이 있다.
한두개는 axios 방식으로도 괜찮지만,
rest API를 사용하는 프로젝트를 하게 된다면 GraphQL을 할 때 Apollo Client를 사용했던 것처럼 쓸 수 있게 해주는 react query를 설치해서 활용하는 것이 좋다.[React Query]
rest-api를 graphQL에서 useQuery(), useMutation() 하듯이 거의 동일하게 쓸 수 있게 해준다.
react query로 graphQL도 사용할 수 있다.
브라우저가 실행되자마자 요청을 날리기 위해 useEffect를 사용한다.
useEffect를 쓰지 않고 그냥 setState를 쓰게되면 화면이 렌더 되자마자 값이 바뀌어서 다시 렌더가 일어나고 또 setState로 값이 바뀌어서 렌더가 되는 것이 반복된다.
첫 마운트 시에만 요청하도록 useEffect에 빈 배열 []
을 넣어야 한다.
useEffect를 사용하지 않은 잘못된 예
이렇게 하면 계속해서렌더링 -> 함수 호출 -> 렌더링 -> 함수 호출 ...
useEffect에는 async를 붙일 수 없기 때문에, 안에 함수를 하나 만들고 useEffect 안에서 그 함수를 호출해서 사용해야 한다.
전체 코드
import { useEffect, useState } from "react";
import axios from "axios";
export default function RestGetPage(): JSX.Element {
const [img, setImg] = useState("");
useEffect(() => {
// async를 붙이기 위해 함수를 선언하고, 만든 함수를 실행시켜야 합니다.
const getImg = async (): Promise<void> => {
const result = await axios.get("https://dog.ceo/api/breeds/image/random");
setImg(result.data.message);
};
void getImg();
}, []);
return <img src={img} />;
}