๋ชฉ์ฐจ
์ด์ ๊ธ โผ
0. 2023.05.05 - [๐ | WEB DEV/React] - [React] 0. React๋ฅผ ์ฌ์ฉํ๋ ์ด์ & ์ด๊ธฐ ์ธํ
1. 2023.05.07 - [๐ | WEB DEV/React] - [React] 1. JSX
2. 2023.05.26 - [๐ | WEB DEV/React] - [React] 2. state (๋ณ์, array, object)
2-1. 2023.05.27 - [๐ | WEB DEV/React] - [React] 2-1. array state ์ ๋ ฌํ๊ธฐ ( .sort()ํ์ฉ)
3. 2023.05.28 - [๐ | WEB DEV/React] - [React] 3. ์ปดํฌ๋ํธ (Component)
4. 2023.05.28 - [๐ | WEB DEV/React] - [React] 4. ๋์ ์ธ UI ์ ์ํ๊ธฐ
5. 2023.05.28 - [๐ | WEB DEV/React] - [React] 5. ๋ฐ๋ณต๋๋ ๋ถ๋ถ ์ถ์ฝํ๊ธฐ (map)
6. 2023.05.29 - [๐ | WEB DEV/React] - [React] 6. props
8. 2023.07.06 - [๐ | WEB DEV/React] - [React] 8. ๋ค๋ฅธ ํ์ผ์์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
11. 2023.10.03 - [๐ | WEB DEV/React] - [React] 11. ๋ผ์ฐํ -3 ์์ฐํ ๋ผ์ฐํ
13. 2024.01.02 - [๐ | WEB DEV/React] - [React] 13. ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ Lifecycle์ useEffect
์ด๋ฒ์๋ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํด ์ํ๋ ๊ฒ๋ค์ ๋ฐ์์๋ณด์!
1. ์๋ฒ๋?
๊ฐ๋จํ๊ฒ ์ด์ผ๊ธฐํ๋ฉด ์๋ฒ๋
์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ฉด ์์ฒญํ๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด์ฃผ๋ ํ๋ก๊ทธ๋จ์ด๋ค.
์๋ฅผ ๋ค์ด '~~์ฌ์ง ๋ณด์ฌ์ค' ํ๋ฉด ์ฌ์ง์ ๋ณด์ฌ์ฃผ๊ณ , '~~๋์์ ๋ณด์ฌ์ค' ํ๋ฉด ๋์์์ ๋ณด์ฌ์ฃผ๋๋ก
๋ง๋ค๋ฉด ๋๋ค.(์ด์ด์์ถ)
์ด๋ ์์ฒญ์ ์ํด์๋ ์ฌ์ ์ ์ ์๋ ์ ํํ ๊ท๊ฒฉ์ ๋ง์ถฐ ๋ณด๋ด์ฃผ์ด์ผ ํ๋ค.
1) ์ด๋ค ๋ฐ์ดํฐ์ธ์ง (URL)
2) ์ด๋ค ๋ฐฉ์์ธ์ง (GET, POST ๋ฑ)
์ฌ๊ธฐ์ GET์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ๋, POST๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๋ ์ฌ์ฉํ๋ค.
โผ ์กฐ๊ธ ๋ ์ ๋ฆฌํ ๋ด์ฉ์ ์๋ ๋งํฌ์!
https://bluishhot-star.tistory.com/237
2. ๊ฐ์ฅ ์ฌ์ด GET, POST ์์ฒญํ๋ ๋ฐฉ๋ฒ
์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๋ ๋ฐฉ๋ฒ์ ์์๋ณด์.
1) GET ์์ฒญ - ์ฃผ์์ฐฝ ์ ๋ ฅ
GET ์์ฒญ์ ํ ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ์ฃผ์์ฐฝ์ url์ ์ ๋ ฅํ๋ ๊ฒ์ด๋ค.
2) POST ์์ฒญ - <form action="~" method="~">
POST ์์ฒญ์ <form>ํ๊ทธ๋ฅผ ์ด์ฉํ๋ฉด ๋๋๋ฐ
์์ฑ์ผ๋ก action์ url, method์ ์์ฒญ๋ฐฉ๋ฒ์ ์ ๋ ฅํ๋ค.
์ด ๋ฐฉ๋ฒ๋ค์ ํน์ง์ ์์ฒญ ์ดํ์ ํ์ด์ง๊ฐ ์๋ก๊ณ ์นจ์ด ๋๋ค๋ ์ ์ด๋ค.
3. AJAX๋ฅผ ์ด์ฉํ ์์ฒญ
AJAX๋ ์๋ก๊ณ ์นจ์์ด ์๋ฒ์ GET, POST ์์ฒญ์ ํ ์ ์๋ ๊ธฐ๋ฅ์ด๋ค.
์ด๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ 3๊ฐ์ง๊ฐ ์๋ค.
1) XMLHttpRequest
2) fetch()
3) ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (axios)
์ด๋ค ์ค ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ axios๋ฅผ ํตํด ์์ฒญ์ ๋ณด๋ด๋ณด์!
1) axios
axios๋ผ๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํด ์์ฒญ์ ๋ณด๋ด๋ฉด ๋น๊ต์ ๊ฐ๊ฒฐํ๊ฒ ์์ฒญ์ ๋ณด๋ผ ์ ์๋ค.
- ์ค์นํ๊ธฐ
npm install axios
- import ํ๊ธฐ
import axios from "axios"
(1) GET ์์ฒญ
- ์์ฒญ
axios.get('์์ฒญํ url')
์์ ์ฝ๋๋ฅผ ์ ๋ ฅํ๋ฉด ์๋ฒ์ GET์์ฒญ์ ํ๋ค.
- ์์ฒญ์ ๋ํ ๊ฒฐ๊ณผ ์ด์ฉํ๊ธฐ
axios.get('์์ฒญํ url')
.then(
...
)
.then() ๋ฉ์๋๋ฅผ ํตํด ์์ฒญ ๋ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
(e.g. ์ฝ์ ์ถ๋ ฅ, state์ ์ฅ ๋ฑ)
.then((res)=>{
console.log(res) //์์ฒญ์ ๋ํ ์๋ฒ๋ก๋ถํฐ์ ๊ฒฐ๊ณผ ์ถ๋ ฅ
})
.then()์ ๋ด๋ถ์๋ ํจ์๋ฅผ ๋ฃ์ด์ค๋ค.
์ด๋ ํด๋น ํจ์์ ํ๋ผ๋ฏธํฐ๋ ์์ฒญ๋ฐ์ ๊ฒ์ ๋ํ ์๋ฒ์ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฌ ๋ฐ๋๋ค.
// ๊ฒฐ๊ณผ ๋ด์ state ์์ฑ
const [result, setResult] = useState([]);
...
.then((res)=>{
let copy = [...result, ...res.data];
setResult(copy);
})
Array์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค๋ฉด ์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ํ ์ ์๋ค.
- ์์ฒญ ์คํจ ์ฒ๋ฆฌ
๋ง์ฝ axios๋ฅผ ํตํด ์์ฒญ์ ๋ณด๋ด๋ ์ ๊ณผ์ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ
.catch()๋ฅผ ์ด์ฉํ๋ฉด ๊ทธ๊ฒ์ ๋ํ ์์ธ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ค.
.catch((err)=>{
...
})
(2) POST ์์ฒญ
axios.post('์์ฒญํ url', {})
post ์์ฒญ์ ์์ ๊ฐ์ด ์์ฑํ๋ค.
์ด๋ url๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋๋ฐ, ๋ฐ์ดํฐ๋ Object ์๋ฃํ ๋ฑ์ ์ ๋ฌํ๋ค.
์์
axios.post('url', {
name: "Kassid",
level:"99"
})
post ์์ฒญ๋ ๋ํ .then() .catch()๋ฅผ ์ด์ฉํด ๊ฐ ์ํฉ์ ์ฝ๋๋ฅผ ์คํํ ์ ์๋ค.
(3) ๋์์ ์ฌ๋ฌ ์์ฒญ ๋ณด๋ด๊ธฐ
ํ ๋ฒ์ ์ฌ๋ฌ ์์ฒญ์ ์๋ฒ์๊ฒ ์์ฒญํ ์ ์๋ค.
์ด๋ Promise๋ฅผ ํ์ฉํ๋ค.
Promise.all([ ์์ฒญ1, ์์ฒญ2, ... ])
์์
Promise.all([axios.get("url1"), axios.post('url2', {name:"Kassid"})])
์ด๋์๋ .then(), .catch() ๊ฐ๋ฅ!
โป ์๋ ์๋ฒ์์ ํต์ ์๋ ๋ฌธ์ ์๋ฃํ๋ง ๊ฐ๋ฅํ๋ค!
์ฌ์ค ์๋ฒ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋์๋ object๋ array ๋ฑ์ ์๋ฃํ์ ์ด์ฉํ ์ ์๋ค.
ํ์ง๋ง ์์์ ๋ณด์๋ ์์๋ค์ ๋ณด๋ฉด ์ ์ด์ฉํ๊ณ ์๋ค.
์ด๊ฒ์ด ๊ฐ๋ฅํ ์ด์ ๋ JSON ์ด๊ธฐ ๋๋ฌธ์ด๋ค. JSON์ ๋ฌธ์์ทจ๊ธ์ ๋ฐ๊ธฐ ๋๋ฌธ์ ์๋ฒ ํต์ ์๋ ์์ ๋กญ๊ฒ ํ์ฉํ ์ ์๋ค.
"{"name" : " "Kassid" "}" -> ์ด๋ฌํ ํ์
๋ฐ๋ผ์ ์๋ฒ๋ก ๋ถํฐ ๋ฐ์ ๋ฐ์ดํฐ๊ฐ array ํน์ object ๋ผ๋ฉด JSON์ด๋ค.
์ด๋ axios ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ JSON์ array, object ๋ฑ์ผ๋ก ๋ณํํ์ฌ ์ฃผ๊ธฐ ๋๋ฌธ์
์ฌ์ฉ์ ์ ์ฅ์์๋ ๋ฐ๋ก ๋ณํ ์์ ์์ด ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ ์ ์๋ค.
โป ์๋ฒ์์ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ html์ ๋ ๋๋งํ ๋ ์ฃผ์ํ ์
์๋ฒ์์ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ state์ ๋ด์์ค ํ html์ ๊ฝ์๋ฃ์ด์ค ๋
state๊ฐ ๋น์ด์๋ค! ๋ผ๊ณ ์ค๋ฅ๋ฅผ ๋ฐํํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
์ด๋ axios ์์ฒญ ๋ณด๋ค html ๋ ๋๋ง์ด ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ ์ด๋ฌํ ๊ฒฝ์ฐ์๋ if ๋ฌธ ๋ฑ์ ์ด์ฉํด state์ ๋ฐ์ดํฐ๊ฐ ๋ด๊ธด ํ์ ๋์คํ๋ ์ด ๋๋๋ก ํ๋ฉด ๋๋ค!
๋๊ธ