react에서 api 관련 로직 모듈화, axios

이온·2023년 3월 20일
0

두번째 프로젝트

목록 보기
4/6

기존 코드

먼저
import React, { useState, useEffect } from "react";
import axios from "axios";
import { SERVER_BASE_URL } from "../../config/constants";
로 필요한 것들을 import해온 뒤에


  const [shelter, setShelter] = useState([]);
  useEffect(() => {
    const fetchData = async () => {
      try {
        const response = await axios.get(`${SERVER_BASE_URL}/shelter`);
        setShelter(response.data);
      } catch (err) {
        console.error(err);
      }
    };
    fetchData();
  }, []);

컴포넌트 안에 axios를 직접 해와서 return값 안에서 아래처럼 사용

{shelter.map((shelter)=> (
   <tr key={shelter.id}>
     <td className="gu-name">{shelter.guNm}</td>
     <td className="shelter-type">{shelter.shelterType}</td>
     <td className="shelter-address">{shelter.address}</td>
     <td className="shelter-qty">{shelter.qty}명</td>
   </tr>

변경 후 코드


api 폴더를 만들어서 그 안에서 관리

//📍api.js
import axios from "axios";
import { SERVER_BASE_URL } from "../config/constants";

export const api = axios.create({
  baseURL: SERVER_BASE_URL,
});
//📍fetchData.js
import { api } from "./api";

export async function fetchFire() {
  try {
    const { data } = await api.get("/fire");
    return data;
  } catch (err) {
    console.log("error: ", err);
  }
}

export async function fetchRain() {
  try {
    const { data } = await api.get(`/rain`);
    return data;
  } catch (err) {
    console.log("error: ", err);
  }
}

export async function fetchShelter() {
  try {
    const { data } = await api.get("/shelter");
    return data;
  } catch (err) {
    console.log("error: ", err);
  }
}

우리는 지금은 get밖에 안써서 한 파일 안에 써줬다.

그리고 hook폴더를 만들고 관리해준다.

//📍useFire.js
import { useState, useEffect } from "react";
import { fetchFire } from "../api";

export function useFire() {
  const [fire, setFire] = useState([]);

  async function _fetchFire() {
    try {
      const fire = await fetchFire();
      setFire(fire);
    } catch (err) {
      throw err;
    }
  }

  useEffect(() => {
    _fetchFire();
  }, []);

  return { fire };
}

그리고 데이터가 필요한 컴포넌트 안에는 결국 한줄로 작성 가능하다.

//📍fireChart.js
import { useFire } from "../../hooks";
로 import해오고
 컴포넌트 안에는
const { fire } = useFire();
이렇게 한줄로만 작성

12줄을 1줄로 간결하게 사용할 수 있다!

profile
👩🏻‍💻

0개의 댓글