
코인잼을 만들고있는데 기초적인 토대는 구현을했다.
전반적인 코드 퀄리티를 높이기위해 리팩토링을 하였다.
업데이트 내용
- Axios 공통 인스턴스 + 데이터 페칭 분리, 설정
- Atomic 디자인으로 파일구조 변경
첫번째 Axios 공통 인스턴스 만들기.
현재 Axios 요청을 3군데에서 한다.
1. 시총 TOP 코인들 불러오기
2. 코인 검색하기
3. 최근 핫 코인 불러오기
이러다보니 중복되는 내용이 생겼기때문에 모듈화를 진행하였다.
import axios from 'axios'
const createAxiosInstance = () => {
return axios.create()
}
export const withAxios = async (request) => {
return await createAxiosInstance().request({
...request,
})
}
우선 공통 인스턴스를 만들었다.
export const API_ROUTES = {
COINS:
'https://api.coingecko.com/api/v3/coins/markets?vs_currency=krw&order=market_cap_desc&per_page=20&page=1&sparkline=true',
TRENDING: 'https://api.coingecko.com/api/v3/search/trending',
FIND: (id) => `https://api.coingecko.com/api/v3/coins/${id}?localization=false&sparkline=true`,
}
페칭 Routes를 통합하였고
각 요청별로 파일을 따로 만들어 주었다.
import { withAxios } from '../utils/withAxios'
import { API_ROUTES } from '../constants/Routes'
export const getCoins = async () => {
return await withAxios({
url: API_ROUTES.COINS,
method: 'GET',
})
}
import { withAxios } from '../utils/withAxios'
import { API_ROUTES } from '../constants/Routes'
export const getFindCoin = (coinId) => {
return withAxios({
url: API_ROUTES.FIND(coinId),
method: 'GET',
})
}
import { withAxios } from '../utils/withAxios'
import { API_ROUTES } from '../constants/Routes'
export const getTrending = async () => {
return await withAxios({
url: API_ROUTES.TRENDING,
method: 'GET',
})
}
두번째 Atomic 디자인으로 컴포넌트들 분리

분리 기준은
atom은 최소한의 기능을 가진 쪼매니들
molecules는 입력을 받기위한 input류
Templates에는 바로 띡 붙일수있는류들로 구성했다.
세번째
만들어둔 Atomic 디자인을 통해 중복되는 코드를 줄임, 데이터 페칭 변경
const url = `https://api.coingecko.com/api/v3/coins/markets?vs_currency=krw&order=market_cap_desc&per_page=20&page=1&sparkline=true`
useEffect(() => {
axios
.get(url)
.then((response) => {
setCoins(response.data)
console.log(response.data)
})
.catch(() => {
alert('코인게코의 서버가 불안정합니다.')
})
}, [url])
▼ 변경후
useEffect(() => {
getCoins()
.then((response) => {
setCoins(response.data)
console.log(response.data)
})
.catch(() => {
alert('코인게코의 서버가 불안정합니다.')
})
}, [])
const params = useParams();
const url = `https://api.coingecko.com/api/v3/coins/${params.coinId}?localization=false&sparkline=true`;
useEffect(() => {
axios.get(url).then((response) => {
setCoin(response.data);
});
}, [url]);
▼ 변경후
const params = useParams()
useEffect(() => {
getFindCoin(params.coinId).then((response) => {
setCoin(response.data)
})
}, [params])
다른 Home, SignIn, SignUp도 비슷하게 작업했다.
그리고 Atomic디자인을 사용하면서 (구)Components 파일들을 삭제했다.
'코인잼' 카테고리의 다른 글
| 코인잼 업데이트 하기 -1부- (0) | 2023.02.20 |
|---|---|
| 코인잼 리팩토링 하기 -3부- (0) | 2023.02.17 |
| 코인잼 리팩토링 하기 -2부- (0) | 2023.02.15 |