Axios
Axios란?
- HTTP 요청을 보내기 위해 널리 사용되는 Promise 기반의 HTTP 클라이언트 라이브러리
- 해당 React 프로젝트 경로 터미널에
npm install axios
입력하여 설치
info
fetch와 axios의 공통점/차이점
공통점
- Promise 기반으로 동작: then, catch 또는 async/await을 이용하여 비동기 처리
차이점
fetch
- 표준 API : 자바스크립트의 내장 API, 별도의 라이브러리 설치가 필요 없다.
- JSON처리 :
fetch
는 응답을 JSON으로 자동 변환하지 않는다.
axios
- 외부 라이브러리: axios를 사용하기 위해 프로젝트에 설치를 해야된다.
- CRUD 이외 다양한 메소드 제공:
axios
의 메소드 중get
,post
,delete
,put
등 다양한 메소드가 존재 - 자동 JSON 변환:
axios
는 자동으로 JSON객체로 변환. 데이터를 전송 시에도 자동으로 문자열화 - 환경 지원: 브라우저와 Node.js 환경 모두 사용
Axios 메소드
- get(url[, config]): 서버로부터 데이터를 요청할 때 사용(
GET 요청
). - post(url[, data[, config]]): 서버에 데이터를 생성하기 위해 사용(
POST 요청
). - put(url[, data[, config]]): 서버의 데이터를 업데이트하기 위해 사용(
PUT 요청
). - delete(url[, config]): 서버의 데이터를 삭제하기 위해 사용(
DELETE 요청
). - patch(url[, data[, config]]): 서버의 데이터 일부를 업데이트하기 위해 사용(
PATCH 요청
). - head(url[, config]): HEAD 요청을 서버로 보내며, 서버 헤더를 가져오기 위해 사용. 본문(body)은 반환하지 않는다.
- options(url[, config]): 서버에서 특정 URL에 대해 지원하는 HTTP 메소드를 조회하기 위해 사용(
OPTIONS 요청
).
tip
axios 메소드 옵션 사용
Axios의 post 방식
// name, username, email이 필수 값
axios.post(
"https://jsonplaceholder.typicode.com/users",
{
name: "John Doe",
username: "johndoe",
email: "johndoe@example.com",
},
{
headers: {
"Content-Type": "application/json",
Authorization: "Bearer my-token",
},
timeout: 5000,
}
);
첫 번째 인자값(url
)은 요청할 주소를 의미
두 번째 인자값(data
)은 서버에서 요구한 데이터를 의미
세 번째 인자값(config
)은 서버에게 전송할 경우 설정을 의미
세 번째 인자값의 경우 이미지 전송 타입 혹은 특별한 상황 이외에는 생략도 가능하다.
Axios 구현
Async.js
import React from "react";
import axios from "axios";
async function Async() {
return await axios
.get("https://jsonplaceholder.typicode.com/users/1")
.then((response) => response.data)
.catch((error) => {
console.log("에러 발생");
});
}
export default Async;
App.js
import React, { useState, useEffect } from "react";
import Async from "./Async";
function App() {
const [user, setUser] = useState(null);
useEffect(() => {
const fetchData = async () => {
const data = await Async();
setUser(data);
};
fetchData();
}, []);
return (
<div>
{user && (
<div>
<h1>이름: {user.name}</h1>
<p>이메일: {user.email}</p>
<p>번호: {user.phone}</p>
</div>
)}
</div>
);
}
export default App;
note
Async는 데이터를 호출하기 위해 사용하는 코드이다.
Async의 코드를 보면 해당 주소에 게 get메소드를 이용하여 서버에게 요청을 보낸것을 확인 가능하다.
axios도 데이터를 통신하는 비동기 함수이기 때문에 async와 await을 통해 해당 서버에서 response가 올 때까지 기다린다.
App.js에서 보면 Async를 호출하여, 데이터를 화면 표현하는 코드이다.
처음 화면에 띄워지자마자 데이터를 표현하지 않는다.
이를 해결하기 위해 useEffect를 사용
useEffect를 통해 처음 렌더링(마운트
)이 될 경우, 원하는 데이터를 뿌려줄 수 있게끔 useState에 데이터를 저장한다.
useEffect가 실행이 끝날 경우, useState의 데이터를 이용하여 화면에 데이터를 보여주게 한다.
tip
axios.get("https://jsonplaceholder.typicode.com/users/1");
axios("https://jsonplaceholder.typicode.com/users/1");
위의 두 코드는 동일한 GET 요청
따라서 Axios를 사용할 때 GET 요청을 보낼 때는 메소드 이름을 생략하여 간결하게 작성 가능