끄적끄적 코딩
article thumbnail
Published 2021. 1. 9. 01:47
[React] Axios React
npm i axios

axios를 설치합니다.

// index.js

import React, { useEffect, useRef, useState } from "react";
import ReactDOM from "react-dom";
import useAxios from "./useAxios";

const App = () => {
  const { loading, data, error, refetch } = useAxios({
    url:
      "https://cors-anywhere.herokuapp.com/https://yts.am/api/v2/list_movies.json",
  });
  return (
    <div className="App">
      <h1>{data && data.status}</h1>
      <h2>{loading && "Loading"}</h2>
      <h2>{error && "Error"}</h2>
      <button onClick={refetch}>Refetch</button>
    </div>
  );
};

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
// useAxios.js

import defaultAxios from "axios";
import { useState, useEffect } from "react";

const useAxios = (opts, axiosInstance = defaultAxios) => {
  const [state, setState] = useState({
    loading: true,
    error: null,
    data: null,
  });
  const [trigger, setTrigger] = useState(0);
  const refetch = () => {
    setState({ ...state, loading: true });
    setTrigger(Date.now());
  };
  useEffect(() => {
    axiosInstance(opts)
      .then((data) => {
        setState({
          ...state,
          loading: false,
          data,
        });
      })
      .catch((error) => {
        setState({ ...state, loading: false, error });
      });
  }, [trigger]);
  return { ...state, refetch };
};

export default useAxios;

axios는 비동기 방식으로 HTTP 데이터 요청을 실행합니다.

요청할 url을 useAxios에 보내줍니다.
axios로 해당 url에 데이터를 요청하고 결과값을 setState()를 통해 반영합니다.
결과값들을 반환하고 그 값들을 표시합니다. (data.status, loading, error)

refetch를 버튼에 연결해줍니다.
버튼을 누르면 trigger가 변경되어서, useEffect부분의 코드가 재실행됩니다.
이는 다시 해당 url에 요청을 보내는 작업을 진행하게 됩니다.

 

'React' 카테고리의 다른 글

[React] Component란?  (0) 2021.02.02
[React] Front end 비교 (Svelte, Vue, Angular, React)  (0) 2021.02.02
[React] 알림 보내기  (0) 2021.01.09
[React] 전체 화면  (0) 2021.01.09
[React] 스크롤  (0) 2021.01.09

검색 태그