리액트

[React]axios

민ズl 2024. 11. 26. 21:10

axios란🤔

http를 이용해서 서버와 통신하기 위해 사용하는 패키지

 

axios 사용

c - 생성

const onSubmitHandler = async(todo) => {
   await axios.post("http://localhost:4000/todos", todo);
};

r - 읽기

const { data } = await axios.get("http://localhost:4000/todos");

u - ✔️patch(변경하는 항목만 바꿔줌) / put(이전 데이터를 무시하고, 덮어씌움)

const onClickEditButtonHandler = (todoId, edit) => {
   axios.patch(`http://localhost:4000/todos/${todoId}`, edit);
};

d - 삭제

const onClickDeleteButtonHandler = (todoId) => {
   axios.delete(`http://localhost:4000/todos/${todoId}`);
};

 

axios custom instance

axios 커스텀 설정 가능 => baseUrl이나 공통 헤더를 한번에 변경가능

const api = axios.create({
  baseURL: "http://localhost:4000",
});

axios interceptor

Axios 요청(request)이나 응답(response)에 작업을 추가하거나 수정할 수 있는 기능

👇 주로 다음과 같을때 사용👇

 

  • 인증 토큰 추가: 모든 요청 헤더에 JWT 토큰 등 인증 정보를 자동으로 추가.
  • 에러 처리: 응답 에러를 통합적으로 처리(예: 401 에러 발생 시 로그아웃).
  • 로딩 표시: 요청 전후에 로딩 상태 관리.
  • 데이터 변환: 응답 데이터를 공통 포맷으로 변환.

 

import axios from 'axios';

// Axios 인스턴스 생성
const api = axios.create({
  baseURL: 'https://api.example.com',
});

// 요청 인터셉터
api.interceptors.request.use(
  (config) => {
    const token = localStorage.getItem('token');
    if (token) {
      config.headers.Authorization = `Bearer ${token}`; // 토큰 추가
    }
    return config;
  },
  (error) => Promise.reject(error)
);

// 응답 인터셉터
api.interceptors.response.use(
  (response) => response, // 응답 그대로 반환
  (error) => {
    if (error.response.status === 401) {
      alert('인증이 만료되었습니다. 다시 로그인하세요.');
      // 로그아웃 처리 또는 리다이렉트
    }
    return Promise.reject(error);
  }
);

export default api;

fetch vs axios

  • 기본 설정 가능 : 기본 url, 시간등
const axiosInstance = axios.create({
  baseURL: 'https://api.example.com',
  timeout: 1000,
  headers: { 'X-Custom-Header': 'foobar' }
});
  • 안토샙터 : 전처리, 후처리 가능
  • 에러핸들링 : fetch는 네트워크 오류만 전달

'리액트' 카테고리의 다른 글

[React]TanStack Query  (2) 2024.11.28
[React]Redux  (0) 2024.11.11
[React]context api  (0) 2024.11.11
[React]form태그 비제어  (0) 2024.11.06
[React]memo(React.memo), useCallback,useMemo  (0) 2024.11.05