ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • React.js(8) - FetchGET&POST
    ์›น ๊ฐœ๋ฐœ/React.js 2023. 4. 5. 17:18

    ๐Ÿ‘ฉ‍๐Ÿ’ป FetchGET 

    http://example.com?a=1&b=2

     

    - url ? ๋’ค์— ํŒŒ๋ผ๋ฏธํ„ฐ=๊ฐ’ $ํŒŒ๋ผ๋ฏธํ„ฐ2=๊ฐ’ ํ˜•ํƒœ๋กœ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

    - ์ฃผ๋กœ ๋ฐ์ดํ„ฐ ์กฐํšŒ๋‚˜ ๊ฒ€์ƒ‰ ๋“ฑ์˜ ๊ธฐ๋Šฅ์— ์‚ฌ์šฉ๋จ 

    - ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•ด ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์„œ๋“œ

     

     

    โœ FetchGet.js

    import React, {Component} from 'react';
    
    class R059_FetchGet extends Component {
        componentDidMount= async ()=>{
            const response = await fetch('http://date.jsontest.com/');
            const body = await response.json();
            alert(body.date);
        }
        
        render() {
            return (
                <h1>fetch get</h1>
            )
        }
    }
    
    export default R059_FetchGet;

     

    ๐Ÿ’šasync- await ๋ฉ”์„œ๋“œ

    โœ ํ˜•ํƒœ

     componentDidMount= async ()=>{
            const response = await fetch('http://date.jsontest.com/');
            const body = await response.json();
            alert(body.date);
        }

     

    - JavaScript์—์„œ ๋น„๋™๊ธฐ์ ์ธ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฉ”์„œ๋“œ

    - Promise ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งˆ์น˜ ๋™๊ธฐ์ ์ธ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.(์‚ฌ์‹ค ๋น„๋™๊ธฐ์ ์ž„)

    - async ํ‚ค์›Œ๋“œ๋กœ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉฐ, ํ•จ์ˆ˜ ๋‚ด์—์„œ await ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Promise ๊ฐ์ฒด๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.

    - await ํ‚ค์›Œ๋“œ๋Š” Promise ๊ฐ์ฒด๊ฐ€ ์ฒ˜๋ฆฌ๋  ๋•Œ๊นŒ์ง€ ์ฝ”๋“œ์˜ ์‹คํ–‰์„ ์ผ์‹œ ์ค‘์ง€ํ•˜๊ณ , ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

    - async-await ํ•จ์ˆ˜๋Š” try-catch ๊ตฌ๋ฌธ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ์ ์ธ ์ฒ˜๋ฆฌ ์ค‘ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

    - response.json() ์ค‘ date ํƒ€์ž… ๋ฐ์ดํ„ฐ๋“ค๋งŒ alert ํ•จ์ˆ˜๋กœ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค. 

     

     

    ๐Ÿค try - catch 

    async function fetchExample() {
      try {
        const response = await fetch('https://example.com/data');
        const data = await response.json();
        return data;
      } catch (error) {
        console.error(error);
      }
    }

    - fetch() ํ•จ์ˆ˜๋‚˜ json() ๋ฉ”์„œ๋“œ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ, catch ๊ตฌ๋ฌธ์—์„œ ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ฝ˜์†”์— ์ถœ๋ ฅํ•ด์ค€๋‹ค.

     

    ๐Ÿ“Œ try-catch

    - ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ๋ฌธ

    - try ๋ธ”๋ก์—๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , catch ๋ธ”๋ก์—๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ฒ˜๋ฆฌํ•  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

    try {
      const result = 10 / 0; // 0์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ
      console.log(result);
    } catch (error) {
      console.error(error);
    }

    - 10์„ 0์œผ๋กœ ๋‚˜๋ˆ„๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋Š”๋ฐ, ์ด๋Š” ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ณ„์‚ฐ์ด๋ฏ€๋กœ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋•Œ catch ๋ธ”๋ก์—์„œ๋Š” ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๊ฒŒ ๋จ

     

    ๐Ÿ“Œ ํŒŒ์ผ ์ฝ์–ด์˜ค๋Š” ์ฝ”๋“œ ์˜ˆ์‹œ ์ž‘์„ฑ

    try {
      const data = readFile('data.txt'); // ํŒŒ์ผ ์ฝ๊ธฐ
      console.log(data);
    } catch (error) {
      if (error.code === 'ENOENT') {
        console.error('File not found'); // ํŒŒ์ผ์ด ์—†๋Š” ๊ฒฝ์šฐ
      } else {
        console.error(error); // ๊ธฐํƒ€ ์˜ค๋ฅ˜
      }
    }

     

     

    ๐Ÿ’š Promise ๊ฐ์ฒด

    - ๋น„๋™๊ธฐ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ฐ์ฒด

    - ๋น„๋™๊ธฐ ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋‹ค์Œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

     

    ๐Ÿ’š Promise ๊ฐ์ฒด ์ƒํƒœ

     

    • ๋Œ€๊ธฐ(pending) ์ƒํƒœ: ๋น„๋™๊ธฐ ์ž‘์—…์ด ์•„์ง ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ์ƒํƒœ
    • ์ดํ–‰(fulfilled) ์ƒํƒœ: ๋น„๋™๊ธฐ ์ž‘์—…์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋œ ์ƒํƒœ์ด๋ฉฐ, ์ด๋•Œ ๊ฒฐ๊ณผ ๊ฐ’์ด ์ „๋‹ฌ๋œ๋‹ค.
    • ๊ฑฐ๋ถ€(rejected) ์ƒํƒœ: ๋น„๋™๊ธฐ ์ž‘์—…์ด ์‹คํŒจํ•œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ์ด๋•Œ ์˜ค๋ฅ˜ ์ •๋ณด๊ฐ€ ์ „๋‹ฌ๋จ

     

     

     

     

    ๐Ÿ’š fetch

    const response = await fetch('http://date.jsontest.com/');

    - HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

    - API์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค. 

    - await๋กœ fetch์˜ ๋ฐ˜ํ™˜๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋‹ค๋ฆฐ๋‹ค. 

     

     

     

    ๐Ÿ’š response.json()

    const body = await response.json();

    - ์ดํ›„ response.json() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‘๋‹ต์„ JSON ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•จ

     

     

    ๐Ÿ’š FetchPOST

    - url ๋’ค์— ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•จ(http body์— ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋„ฃ์ง€ ์•Š๋Š”๋‹ค.)

    - ์„œ๋ฒ„์˜ ์ƒํƒœ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋“ฑ์˜ ์ˆ˜ํ–‰ ์ž‘์—…์— ์‚ฌ์šฉ๋œ๋‹ค. 

     

     

    โœ FetchPost.js

    import React from "react";
    import { Component } from "react";
    
    class R060_FetchPost extends Component {
        componentDidMount=async ()=>{
            const response = awiait fetch('http://data.jsontest.com/', {
                #fetch ๋ฐฉ๋ฒ•์€ get๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ ๋‘ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ์— post ํ˜ธ์ถœ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์ถ”๊ฐ€ ๋œ๋‹ค. 
                #Content-Type ๋ณ€์ˆ˜ : json ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด application/json์— ํ• ๋‹นํ•œ๋‹ค.
                method : 'POST',
                headers : {
                    'Content-Type' : 'application/json',
                },
                body : {a:"react", b:200},
    
            });
            const body = await response.json();
            alert(body.date)
    
    
        }
    
        render () {
            return (
                <h1>fetch post</h1>
            )
        }
    }
    
    export default R060_FetchPost;

     

Designed by Tistory.