일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- do it
- bigquery
- docker
- 구글
- React
- 심층신경망
- python
- 차원 축소
- 클러스터링
- 캐글
- 프론트엔드
- 쿠버네티스
- 최적화
- DBSCAN
- LDA
- 타입스크립트
- frontend
- 리액트
- Machine Learning
- 파이썬
- Kaggle
- ADP
- r
- 대감집 체험기
- 머신러닝
- TooBigToInnovate
- ADP 실기
- Kubernetes
- 빅쿼리
- 대감집
- Today
- Total
No Story, No Ecstasy
리액트를 다루는 기술 개정판 [외부 API를 연동하여 뉴스 뷰어 만들기] 본문
14. 외부 API를 연동하여 뉴스 뷰어 만들기
- 비동기 작업의 이해 > API 호출해서 데이터 받아오기 > API 키 발급받기 > 뉴스 뷰어 UI 만들기 > 데이터 연동하기
> 카테고리 기능 구현하기 > 리액트 라우터 적용하기
- 비동기 작업의 이해
. setTimeout(func, 3000) : 3초 후에 func 수행
- Promise: 콜백 지옥 코드가 형성되지 않도록 ES6에 도입된 기능
. then을 사용하며 그 다음 작업을 설정하기 때문에 콜백 지옥이 형성되지 않는다.
function increase(number) {
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
const result = number + 10;
if (result > 50) {
const e = new Error('NumberTooBig');
return reject(e);
}
resolve(result);
}, 1000);
});
return promise;
}
increase(0).then(number => {
console.log(number);
return increase(number);
})
.then(number => {
console.log(number);
return increase(number);
})
.then(number => {
console.log(number);
return increase(number);
})
.catch(e => {
console.log(e);
});
- async/await
. Promise를 더 쉽게 사용할 수 있도록 해 주는 문법
. 함수의 앞에 async 키워드를 추가하고, 함수 내부에서 Promise 앞에 await 키워드를 사용한다.
. 이렇게 하면 Promise가 끝날 때까지 기다리고, 결과 값을 특정 변수에 담을 수 있다.
function increase(number) {
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
const result = number + 10;
if (result > 50) {
const e = new Error('NumberTooBig');
return reject(e);
}
resolve(result);
}, 1000);
});
return promise;
}
async function runTasks() {
try {
let result = await increase(0);
console.log(result);
result = await increase(result);
console.loc(result);
result = await increase(result);
console.loc(result);
result = await increase(result);
console.loc(result);
} catch (e) {
console.log(e);
}
}
- axios로 API 호출해서 데이터 받아 오기
. 현재 가장 많이 사용되고 있는 자바스크립트 HTTP 클라이언트 (HTTP 요청을 Promise 기반으로 처리)
. axios.get으로 요청하고, then을 통해 비동기적으로 확인 (async를 사용할 수도 있음)
- 데이터 연동하기
. useEffect를 사용하여 컴포넌트가 처음 렌더링되는 시점에 API를 요청한다.
. useEffect에 등록하는 함수에 async를 붙이면 안 된다. useEffect에서 반환하는 값은 뒷정리 함수이기 때문이다.
. async를 사용하고 싶으면 함수 내부에서 새로 만들어서 사용해야 한다.
. loading이라는 상태도 관리하여 API 요청이 대기 중인지 판별한다.
- 카테고리 기능 구현하기
- API 호출 시 카테고리 지정
. category를 prop으로 받아서 주소에 추가해준다.
- 리액트 라우터 적용하기
. 카테고리 값을 useState가 아닌 리액트 라우터의 URL 파라미터로 관리한다.
- NavLink 사용하기
. 선택된 카테고리에 다른 스타일을 주는 기능을 NavLink로 대체한다.
- usePromise 커스텀 Hook 만들기
. 나만의 util 함수를 만든다.
'Frontend Series' 카테고리의 다른 글
리액트를 다루는 기술 개정판 [Context API] (0) | 2021.04.24 |
---|---|
리액트를 다루는 기술 개정판 [리액트 라우터로 SPA 개발하기] (0) | 2021.04.22 |
리액트를 다루는 기술 개정판 [IMMER 불변성 유지] (0) | 2021.04.22 |
리액트를 다루는 기술 개정판 [컴포넌트 성능 최적화] (0) | 2021.04.22 |
Do It! 타입스크립트 프로그래밍 [프로젝트 생성과 관리] (0) | 2021.04.18 |