-
1. API 연동의 기본 - API 연동 | 벨로퍼트Front-end/React.js 2020. 7. 23. 14:39반응형
API 연동을 하기 위해서, 우선 프로젝트를 새로 만들어주도록 하겠습니다.
$ npx create-react-app api-integrate
그리고, API 를 호출하기 위해서 axios 라는 라이브러리를 설치하세요.
$ cd api-integrate
$ yarn add axiosaxios를 사용해서 GET, PUT, POST, DELETE 등의 메서드로 API 요청을 할 수 있는데요, 만약 이 메서드들에 대하여 잘 모르시는 경우에는 REST API 에 대한 글을 한번 읽어보세요.
간단하게 설명을 드리자면, REST API 를 사용 할 때에는 하고 싶은 작업에 따라 다른 메서드로 요청을 할 수 있는데 메서드들은 다음 의미를 가지고 있습니다.
・ GET: 데이터 조회
・ POST: 데이터 등록
・ PUT: 데이터 수정
・ DELETE: 데이터 제거
참고로 이 메서드 외에도 PATCH, HEAD 와 같은 메서드들도 있습니다.
axios 의 사용법은 다음과 같습니다.
import axios from 'axios'; axios.get('/users/1');
get 이 위치한 자리에는 메서드 이름을 소문자로 넣습니다. 예를 들어서 새로운 데이터를 등록하고 싶다면 axios.post() 를 사용하면 됩니다.
그리고, 파라미터에는 API 의 주소를 넣습니다.
axios.post() 로 데이터를 등록 할 때에는 두번째 파라미터에 등록하고자 하는 정보를 넣을 수 있습니다.
axios.post('/users', { username: 'blabla', name: 'blabla' });
우리가 이번에 API 연동 실습을 할 때에는 JSONPlaceholder 에 있는 연습용 API 를 사용해볼 것입니다.
그 중에서 사용 할 API의 주소는 https://jsonplaceholder.typicode.com/users 입니다.
useState 와 useEffect 로 데이터 로딩하기
useState 를 사용하여 요청 상태를 관리하고, useEffect 를 사용하여 컴포넌트가 렌더링되는 시점에 요청을 시작하는 작업을 해보겠습니다.
요청에 대한 상태를 관리 할 때에는 다음과 같이 총 3가지 상태를 관리해주어야합니다.
1. 요청의 결과
2. 로딩 상태
3. 에러
src 컴포넌트에 Users.js 를 생성하고 다음 코드를 작성해보세요.
/src/Users.js :
import React, { useState, useEffect } from 'react'; import axios from 'axios'; function Users() { const [users, setUsers] = useState(null); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); useEffect(() => { const fetchUsers = async () => { try { // 요청이 시작 할 때에는 error 와 users 를 초기화하고 setError(null); setUsers(null); // loading 상태를 true 로 바꿉니다. setLoading(true); const response = await axios.get( 'https://jsonplaceholder.typicode.com/users' ); setUsers(response.data); // 데이터는 response.data 안에 들어있습니다. } catch (e) { setError(e); } setLoading(false); }; fetchUsers(); }, []); if (loading) return <div>로딩중..</div>; if (error) return <div>에러가 발생했습니다</div>; if (!users) return null; return ( <ul> {users.map(user => ( <li key={user.id}> {user.username} ({user.name}) </li> ))} </ul> ); } export default Users;
참고로, useEffect 에 첫번째 파라미터로 등록하는 함수에는 async 를 사용 할 수 없기 때문에 함수 내부에서 async 를 사용하는 새로운 함수를 선언해주어야 합니다.
로딩 상태가 활성화 됐을 땐 로딩중.. 이라는 문구를 보여줬습니다. 그리고, users 값이 아직 없을 때에는 null 을 보여주도록 처리했습니다. 맨 마지막에서는 users 배열을 렌더링하는 작업을 해주었습니다.
이제 이 컴포넌트가 잘 작동하는지 확인해봅시다. App 컴포넌트에서 User 컴포넌트를 렌더링해보세요.
/src/App.js :
import React from 'react'; import Users from './Users'; function App() { return <Users />; } export default App;
에러 발생 확인하기
에러가 발생하는지도 확인해봅시다. 에러가 발생하는것을 확인하기 위하여 주소를 이상하게 바꿔봅시다.
const response = await axios.get( 'https://jsonplaceholder.typicode.com/users/showmeerror' );
에러가 잘 나타났나요? 에러가 발생 한 것을 확인하셨다면 다시 원상복구하세요.
버튼을 눌러서 API 재요청하기
이번에는 버튼을 눌러서 API를 재요청하는 기능을 구현해보겠습니다. 그렇게 하려면, 아까 구현했던 fetchUsers 함수를 바깥으로 꺼내주고, 버튼을 만들어서 해당 함수를 연결해주면 됩니다.
/src/Users.js :
function Users() { // ... const fetchUsers = async () => { try { // 요청이 시작 할 때에는 error 와 users 를 초기화하고 setError(null); setUsers(null); // loading 상태를 true 로 바꿉니다. setLoading(true); const response = await axios.get( 'https://jsonplaceholder.typicode.com/users' ); setUsers(response.data); // 데이터는 response.data 안에 들어있습니다. } catch (e) { setError(e); } setLoading(false); }; useEffect(() => { fetchUsers(); }, []); // ... return ( <> <ul> {users.map(user => ( <li key={user.id}> {user.username} ({user.name}) </li> ))} </ul> <button onClick={fetchUsers}>다시 불러오기</button> </> ); }
다시 불러오기 버튼이 잘 작동하고 있나요?
반응형'Front-end > React.js' 카테고리의 다른 글
3. useAsync 커스텀 Hook 만들어서 사용하기 - API 연동 | 벨로퍼트 (0) 2020.07.24 2. useReducer로 요청 상태 관리하기 - API 연동 | 벨로퍼트 (0) 2020.07.23 4. 기능 구현하기 - TodoList | 벨로퍼트 (0) 2020.07.23 3. Context API 를 활용한 상태관리 - TodoList | 벨로퍼트 (0) 2020.07.22 2. 프로젝트 생성 UI 준비(2) - TodoList | 벨로퍼트 (0) 2020.07.22