-
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;
'์น ๊ฐ๋ฐ > React.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React(13) - UserList ๋ง๋ค๊ธฐ ๋ฏธ๋ ์น ๋ง๋ค๊ธฐ (0) 2023.06.02 React.js(9) - axios (0) 2023.05.03 React.js(7) - SweetAlert2 (0) 2023.04.05 React.js(6) - Reactstrap ์์ ์ค๋ช (2) (0) 2023.04.05 React.js(5) - Reactstrap ์์ ์ค๋ช (1) (0) 2023.03.29