[React] ๐Ÿ“ค Ajax(axios)๋ฅผ ์ด์šฉํ•œ ์˜ˆ์ œ

์ด๋‹ค์˜ยท2024๋…„ 7์›” 10์ผ

React

๋ชฉ๋ก ๋ณด๊ธฐ
15/31

๐ŸŸจ Ajax๋ž€

์„œ๋ฒ„์— GET, POST ์š”์ฒญ์„ ํ•  ๋•Œ ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋Šฅ์„ AJAX๋ผ๊ณ  ํ•œ๋‹ค.

  • ์„œ๋ฒ„๋ž€? ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์ฃผ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

๐ŸŸจ Ajax ๋ฐ์ดํ„ฐ ์š”์ฒญ๋ฐฉ๋ฒ•

  1. GET, POST ์ค‘ ์–ด๋–ค ๋ฐฉ๋ฒ•์œผ๋กœ ๋ณด๋‚ผ ์ง€ ์„ ํƒ
  2. URL ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•ด์„œ ๋ฐ›์•„์˜ฌ ๊ฑด ์ง€ ๋˜๋Š” ์ „์†กํ•  ๊ฒƒ์ธ ์ง€ ์„ ํƒ

๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•ด์„œ ๋ฐ›์•„์˜ฌ ๋•Œ๋Š” get์‚ฌ์šฉ, ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋• post๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค URLํ˜•์‹์„ ์ž˜ ์ง€์ผœ์„œ ๋ณด๋‚ด์•ผ ํ•œ๋‹ค. ์ง€ํ‚ค์ง€ ์•Š์œผ๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ฌ ๋•Œ๋‚˜ ๋ณด๋‚ผ ๋•Œ๋‚˜ ๊ธฐ๋Šฅ์ด ์ž˜ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค

๐ŸŸจ Ajax ๋ฐ์ดํ„ฐ ์š”์ฒญ ๋ฐฉ๋ฒ• 3๊ฐ€์ง€

(1) XMLHttpRequest ๋ฌธ๋ฒ•
(2) fetch() ๋ฌธ๋ฒ•
(3) axios ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • XMLHttpRequest๋ฅผ ๊ณผ๊ฑฐ์—๋Š” ์ž˜ ์‚ฌ์šฉ๋์ง€๋งŒ ์ž˜ ์•ˆ ์“ฐ๋Š” ์ด์œ ๋Š” Fetch API๊ฐ€ ๋” ๊ฐ„๋‹จํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. fetch๋Š” ES6๋ถ€ํ„ฐ JavaScript์— ๋„์ž…๋œ ๋‚ด์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ๋ฐ ๋”ฐ๋กœ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ , ์‚ฌ์šฉํ•ด๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์— axios์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  axios๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ์ž๋™์œผ๋กœ JSON ๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— fetch๋ณด๋‹ค ์‚ฌ์šฉ์ด ๋” ๊ฐ„ํŽธํ•˜๋‹ค. ์ด ์™ธ์—๋„ ์žฅ์ ์€ ๋งŽ๋‹ค. Promise ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜์—ฌ ๋น„๋™๊ธฐ ์ž‘์—…์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

๐ŸŸจ axios ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • ๋ณดํ†ต ๋ฒ„ํŠผํƒœ๊ทธ์— onClick ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. axios๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์„ค์น˜๋ฅผ ํ•ด์•ผ ํ•˜๋Š”๋ฐ ์•„๋ž˜ ์„ค์น˜๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๋ฉด ...

<axios ์„ค์น˜>
(1) ํ„ฐ๋ฏธ๋„ > npm install axios
(2) axios import ํ•ด์˜ค๊ธฐ
(3) axios ์ž‘์„ฑ๋ฐฉ๋ฒ• > axios.get('URL').then((๋งค๊ฐœ๋ณ€์ˆ˜) => ๋งค๊ฐœ๋ณ€์ˆ˜)

  • .get์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•ด์„œ ๋ฐ›์•„์˜ค๊ณ  .then์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ€์ง€๊ณ  ์™”์„ ๋•Œ ํ™”๋ฉด์— ๋ Œ๋”๋ง์ด ๋  ๋‚ด์šฉ์„ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค. ๋ณดํ†ต์€ result ๋˜๋Š” response,res๋กœ ๋งŽ์ด ์ ๋Š”๋‹ค. โš ๏ธresult๋ผ๊ณ  ์ ์—ˆ์„ ๋•Œ ์ถœ๋ ฅํ•ด๋ณด๋ฉด ๋‚ด๊ฐ€ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ด ์•„๋‹Œ ์„œ๋ฒ„ ์„ฑ๊ณต์—ฌ๋ถ€์— ๋Œ€ํ•œ ๋‚ด์šฉ, ๋‹ค๋ฅธ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋‚ด์šฉ๋“ค๋„ ๊ฐ™์ด ๊ฐ€์ง€๊ณ  ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜ํ™˜ํ•  ๋•Œ๋Š” result.data ๋ผ๊ณ  ์ ์–ด์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ๋ถˆ๋Ÿฌ์˜ค๋ฉด ๋œ๋‹ค. ์•„๋ž˜๋Š” ์˜ˆ์‹œ์ธ๋ฐ ์ฐธ๊ณ ํ•˜๋ฉด ...
import axios from "axios"; //axios import ํ•˜๊ธฐ

const onClick = () => {
    axios.get("URL").then((result) => result.data);
  };

(4) ๊ฒฝ๋กœ ์ž‘์„ฑ์ด๋‚˜ ๋‹ค๋ฅธ ๊ฒŒ ์ž˜๋ชป๋œ ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉด ajax ์š”์ฒญ์— ์‹คํŒจ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋Ÿด ๋•Œ์—๋Š” .catch() ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ž˜๋ชป๋œ ๋ถ€๋ถ„์ด ์žˆ์„ ๋•Œ ๋ณด์—ฌ์งˆ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค.

import axios from "axios"; //axios import ํ•˜๊ธฐ

const onClick= () => {
  axios.get("URL")
   .then((result) => {
      return result.data;
    })
    .catch(() => {
      // ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ๊ธฐ๋ณธ๊ฐ’์ด๋‚˜ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ• ์ถ”๊ฐ€
    });
}}

๐Ÿ’กaxios๋ฅผ ์ด์šฉํ•œ ์˜ˆ์ œ

  • ๋”๋ณด๊ธฐ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ๋ฐ์ดํ„ฐ ์š”์ฒญํ•œ ๊ฒƒ์„ ๋ฐ›์•„์™€์„œ ์ƒํ’ˆ๋“ค ๋ณด์—ฌ์ง€๊ฒŒ ํ•˜๊ธฐ

//App.jsx

import axios from "axios";
import data from "./data";

function App() {
  const [shoes, setShoes] = useState(data);
  
  const fileData = (number) => {
    axios
      .get(`https://codingapple1.github.io/shop/data${number}.json`)
      .then((result) => {
        const copy = [...shoes, ...result.data];
        setShoes(copy);
      });
  };

  const onClickAddItems = () => {
    if (shoes.length === 3) {
      fileData(2);
    } else if (shoes.length === 6) {
      fileData(3);
    } else if (shoes.length === 9) {
      alert("์ƒํ’ˆ์ด ์—†์Šต๋‹ˆ๋‹ค");
    }
  };
  return (
    <div className="App">
      <Button variant="secondary" onClick={onClickAddItems}>
         ๋”๋ณด๊ธฐ
      </Button>
    </div>
  );
}
export default App;
  • ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ํ™•์ธํ•˜์—ฌ get์š”์ฒญ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์™”๋‹ค. axios๋ฅผ ๊ณ„์† ์กฐ๊ฑด๋ฌธ์— ์“ฐ๊ธฐ์—๋Š” ์ฝ”๋“œ๋„ ๊ธธ์–ด์ง€๊ณ , ๋ณด๊ธฐ์—๋„ ๋ถˆํŽธํ•˜๋‹ค. ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ 2โžก๏ธ3์œผ๋กœ๋งŒ ๋ณ€๊ฒฝ๋˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€์ˆ˜ number๋ฅผ ๋„ฃ์–ด์คฌ๊ณ , ์ธ์ˆ˜๋กœ ๊ทธ์— ๋งž๋Š” 2, 3์„ ๋„ฃ์–ด์คฌ๋‹ค.

์ถœ์ฒ˜

์ฝ”๋”ฉ์• ํ”Œ ๋ฆฌ์•กํŠธ

0๊ฐœ์˜ ๋Œ“๊ธ€