axios로 api로 호출해서 데이터 받아오기 -> newsapi API 키 발급받기 -> 뉴스 UI만들기 -> 데이터 연동 -> 카테고리 기능 구현 -> 라우터 적용하여 템플릿 제작
- axios 라이브러리 설치
- prettier 추가
- App.js
- JSON.stringify
JSON.stringify() 메서드는 JavaScript 값이나 객체를 JSON 문자열로 변환합니다. 선택적으로, replacer를 함수로 전달할 경우 변환 전 값을 변형할 수 있고, 배열로 전달할 경우 지정한 속성만 결과에 포함합니다.
- App.js 수정
비동기 데이터 받아올 때 promise 객체 타입을 사용한 내용


api를 요청 (아직 데이터르 불러오지 않고 가짜데이터를 먼저 보이게 한 후 배치나 구성이 정확하게 되어있는지 먼저 확인해 보자)
- NewsList.js 입력
- App.js 수정
- 결과
페이지가 로드되는 순간 데이터를 받아와야 한다- useEffect
요청이 대기 중일때는 loading겂아 true 되고 요청이 끝나면 loading이 false.
- NewsList.js 수정
- 결과
화면에 카테고리를 보여 줄때는 영어로 된 값을 그대로 보여주지 않고 한글로 보여준 뒤 클릭했을때 영어로 된 카테고리 값을 사용하도록 구현
- Categories.js 생성
- NewsList.js 수정
category 값을 업데이트하는 onSelect 함수로 만들어준다.
그리고 나서category와 onSelect 함수를 Catagories 컴포넌트에게 props로 전달해준다(Categories의 c.name값을 받아오게 된다)
또, category값을 NewsList 컴포넌트에게도 전달해 줘야한다.
- git을 통해 yarn add react-router-dom 입력하여 설치
- index.js 수정 (라우터로 App을 감싸준다)
const root = ReactDOM.createRoot(document.getElementById('root')); root.render( <BrowserRouter> <App /> </BrowserRouter> );
- App.js 수정(라우트처리)
- Categories에서 기존의 onSelect함수(카테고리 키 선택하고 선택된 카테고리에 다른 스타일을 주는 기능)를 NavLink로 대체.
- Categories.js 수정
- API호출할 때 Promise 사용하는데 있어 우리가 커스텀훅을 만들어 리팩토링을 진행해 본다.
- 이름을 usePromise으로 지정.
- src 디렉터리 내에 lib 디렉터리 내에 usePromise.js 생성
loading, resolved, error- usePromise.js 생성
- NewsList.js 수정