코드의 가독성과 유지보수를 위해 백엔드와 소통하는 api 주소를 모듈화 하고자 했습니다.
// api.jsx
import axios from 'axios';
const BASEAPI = '/api';
const api = {
news: '/news',
members: '/members',
articles: (articleId) => `/articles/${articleId}`,
};
const axiosInstance = axios.create({
baseURL: BASEAPI,
});
export { api, axiosInstance }
api를 요청하는 코드를 모아놓은 것입니다.
// fetch.jsx
import { api, axiosInstance } from './api'
// 회원 조회
function getMembers(success, fail) {
return axiosInstance.get(api.members)
.then(success)
.catch(fail)
}
// 새로운 회원 등록
function postMembers(category, success, fail) {
return axiosInstance.post(api.members, category)
.then(success)
.catch(fail)
}
// 뉴스 데이터 조회
function getNews(success, fail) {
return axiosInstance.get(api.news)
.then(success)
.catch(fail)
}
// 뉴스 하나 조회
function getArticle(articleId, success, fail) {
const articleUrl = api.articles(articleId)
return axiosInstance.get(articleUrl)
.then(success)
.catch(fail)
}
export { getMembers, postMembers, getNews, getArticle }
각 컴포넌트에서 모듈화 해둔 axios요청을 사용하는 방법입니다.
// Mypage.jsx
import { useState, useEffect } from 'react';
import { getMembers, postMembers } from '../api/fetch';
function MyPage() {
// 회원 정보
const [members, setMembers] = useState([])
// 회원 생성
function handleCreateMember() {
postMembers(
category,
(response) => {
const key = response?.data.key
},
(error) => {
console.log(error)
}
)
}
// 회원 조회
useEffect(() => {
getMembers(
(response) => {
setMembers(response?.data)
},
(error) => {
console.log(error)
})
}, []);
return (
<div>
<div>
{members.name}
</div>
<div>
{members.age}
</div>
</div>
);
}
// NewsDetail.jsx
import { useState, useEffect } from 'react';
import { getArticle } from '../api/fetch';
function NewsDetailCard() {
// 뉴스 한 개 데이터
const [article, setArticle] = useState([]);
// 뉴스 한 개 데이터 요청
useEffect(() => {
getArticle(
articleId,
(response) => {setArticle(response?.data)},
(error) => {console.log(error)}
);
}, [articleId]);
return (
<div>
<div>
{article.title}
</div>
<div>
{article.content}
</div>
</div>
);
}