-
[오늘의 일기 만들기] fetch와 axios를 사용하여 API 불러오기 (feat. useEffect)IT 2022. 6. 21. 01:36728x90
엘리스에서 Promise, fetch, async/await, axios를 배웠는데 그 중 제일 이해가 잘 갔던 내용은 axios 였다.
문제를 풀면서도 그냥 넘어가기보다는 어느정도 이렇게 동작하는구나 하며 보고 지나갔는데, 일기장 만드는 것에서
fetch로 api를 사용하는 부분이 나왔다.
fetch로 가져오는 거면 당연하게도 axios로도 가져올 수 있겠지?
배운 거 복습할 겸 작성해보자 ! 하고 작성해보았다.
바로 안떠올라서 지난번 풀었던 문제를 다시 보며 풀었다.
1. 거기에 추가로 useEffect Hook을 같이 사용했다. useEffect의 두번째 인자에 deps로 받는 부분에 빈 배열을 넣어주면 렌더링 시 한 번만 실행되기 때문에, API는 처음 한 번 불러오면 되니까 그렇게 했다.
2. try{} catch{}문도 간단하게 같이 작성해보았다 ㅎㅎ
3. 해당 주소의 api값은 공개된 fake api값이라고 한다 ㅎㅎ 신기방기
구글에 jsonplaceholder 검색 후 들어가면 확인할 수 있다.
1. fetch로 받아오기
const [data, setData] = useState([]); const dataId = useRef(0); const getData = async() => { const res = await fetch('https://jsonplaceholder.typicode.com/comments') .then((res)=>res.json()); const initData = res.slice(0,20).map((item)=>{ return { author: item.email, content: item.body, emotion: Math.floor(Math.random()*5)+1, created_date: new Date().getTime(), id : dataId.current++ } }) setData(initData); } useEffect (()=>{ getData(); },[])
참고사항
useEffect는 Promise 객체를 직접 받지 못한다.
useEffect 안에 작성하려면 그 안에 다시 함수를 정의해서 async/await을 적어주어야한다.
중간 res에 slice를 해주는 이유는, 해당 api를 가져오면 500개의 데이터가 있기 때문이다. 나는 호출하는 연습을 하고 있는거라
0번째부터 19번째까지 있는 데이터만 잘라썼다.
내가 만들고 있는 일기장에는 있지만 해당 api에는 없는 감정점수 부분도 있다.
그 부분은 JS의 내장함수 Math를 활용하여 1부터 5까지 랜덤으로 받게 하는 부분도 재밌었다.👀
2. axios 로 api 호출하기
그래서 axios를 사용하는 건 useEffect 안에 작성했다. 이런 식으로 작성이 되는구나를 알게 됐다 (!)
axios는 먼저 터미널에서 npm으로 install 해주고 사용해야한다.
npm install axios
import axios from "axios"; const [data, setData] = useState([]); const dataId = useRef(0); useEffect(()=>{ async function axiosGetData() { try{ const response = await axios.get('https://jsonplaceholder.typicode.com/comments') const result = response.data const initData = result.slice(0,20).map((item)=>{ return { author: item.email, content: item.body, emotion: Math.floor(Math.random()*5)+1, created_date: new Date().getTime(), id : dataId.current++ } }) setData(initData); } catch(e){ throw new Error(); } } axiosGetData(); },[]);
try,catch 도 같이 쓰여 더 길어보이지만, 더 길지는 않다.
return 받는 부분 dataId는 위에 useRef로 정의한 변수다.
다음 글은 useRef에 대해 다시 정리해봐야겠다
'IT' 카테고리의 다른 글
[오늘의 일기 만들기] 리액트 useState 사용&활용하기 (0) 2022.06.20 리액트 설치(create-react-app)부터 깃헙으로 배포(gh-pages)까지 (0) 2022.06.09 엑셀보다쉬운SQL_1주차 (데이터베이스,SQL,쿼리, select, where) (0) 2022.01.02 [네이버 부스트코스] 5) Tomcat 다운받기 및 설치하기에서 JDK, JRE 설정법 (0) 2021.07.31 [스파르타코딩클럽] [왕초보] 비개발자를 위한, 웹개발 종합반 (프로그래밍 실무, 풀스택) Credit 1기 수료 후기 (0) 2021.07.24