728x90
λ°μν
π‘ μ€μ΅ ν¬μΈνΈ!
- μ΄λ²μλ GET μμ²μ ν΅ν΄ λ°μμ¨ λ°μ΄ν°λ₯Ό κ°μ§κ³ "μν λ보기" λ²νΌμ λλ μ λ μν λ μ΄μμμ ν΄λΉ λ°μ΄ν°λ€μ΄ μΆκ°λλλ‘ λ§λ€μ΄λ³΄μλ€.
π Ajax μμ보기
- Ajax λ μλ²μ μλ‘κ³ μΉ¨ μμ΄ μμ²μ ν μ μκ² λμμ£Όλ μΌμ’ μ JavaScript μ½λμ΄λ€.
- μλ²λ λκ΅°κ°κ° νΉμ URL λ‘ μμ²μ νλ©΄ λ°μ΄ν°λ₯Ό κ°μ Έλ€μ£Όλ νλ‘κ·Έλ¨ μ λλ‘ μ΄ν΄νλ©΄ νΈνλ€.
- μμ²μ΄λ μλ²μ GET, POST λ±κ³Ό κ°μ΄ μμ²νλ λ°©λ²μ μλ―Ένλλ° μ¬μ€ μΉνμ, λ‘κ·ΈμΈ, κ²μ λ±μ GET, POST μμ²μ ν΅ν΄ μ§ννλ€.
- GET : λ°μ΄ν°, μΉνμ΄μ§ κ°μ κ²μ μ½κ³ μΆμ λ μλ²μ 보λ΄λ μμ²μ μλ―Ένλ©°, λνμ μΈ GET μμ²μΌλ‘λ λΈλΌμ°μ μ£Όμμ°½μ URL μ μ λ ₯νλ νμ λ±μ΄ μλ€.
- POST : λ°μ΄ν°λ₯Ό μλ²λ‘ 보λ΄κ³ μΆμ λ μλ²μ 보λ΄λ μμ²μ μλ―Ένλ©°, λνμ μΈ POST μμ²μΌλ‘λ νΉμ μ¬μ΄νΈμμ λ‘κ·ΈμΈνλ νμλ λκΈμ λ¨κΈ°λ νμ λ±μ΄ μλ€.
- μ¦, μλλ GET, POST μ κ°μ μμ²μ νλ©΄ κ°μ λ‘ νμ΄μ§κ° μλ‘κ³ μΉ¨λμ§λ§, Ajax λ₯Ό ν΅ν΄ μ΄λ¬ν μμ²λ€μ μλ‘κ³ μΉ¨ μμ΄ ν μ μκ² λλ κ²μ΄λ€.
π€ Ajax μ¬μ© λ°©λ² μμ보기
- Ajax λ₯Ό μ¬μ©νλ λ°©λ²μ λ€μνλ€.
- jQuery Ajax λ₯Ό μ¬μ©νλ€.
- axios λ₯Ό μ€μΉν΄μ μ¬μ©νλ€.
- JavaScript fetch() λ₯Ό μ¬μ©νλ€.
- React κ°λ°νκ²½μμλ μ£Όλ‘ axios μ fetch() λ₯Ό λ§μ΄ μ¬μ©νλ€.
π€ Ajax μ¬μ©μ μν΄ axios μ€μΉνκΈ°
// npm μ μ΄μ©νλ κ²½μ°
npm install axios
// yarn μ μ΄μ©νλ κ²½μ°
yarn add axios
- μμ μ½λ μ€ νλλ₯Ό νν΄μ ν°λ―Έλμ μ λ ₯νλ©΄ axios κ° μ€μΉλλ€.
import axios from 'axios';
- axios μ€μΉκ° μλ£λλ©΄ μ¬μ©νκ³ μ νλ νμΌ μ΅μλ¨μ μμ κ°μ΄ μ½λλ₯Ό μμ±νμ¬ import ν΄μ€λ€.
π "μν λ보기" λ²νΌ λ° κΈ°λ₯ λ§λ€κΈ°
π€ "μν λ보기" λ²νΌ UI λ§λ€κΈ°
- "μν λ보기" λ²νΌμ λ§λ€μ΄μ, μ΄ λ²νΌμ λλ₯΄λ©΄ μν 3κ°λ₯Ό λ 보μ¬μ€ μ μλλ‘ ν΄λ³΄μλ€.
import axios from 'axios';
function App(){
return (
<button className="btn btn-primary">μν λ보기</button>
)
}
- λ¨Όμ μ λΉν μμΉμ μμ κ°μ΄ button νκ·Έλ₯Ό μΆκ°ν΄μ£Όλ©΄ λλ€.
- κ·ΈλΌ μμ κ°μ΄ μ λΉν μμΉμ "μν λ보기" λ²νΌμ΄ μκΈ΄λ€.
π€ "μν λ보기" λ²νΌμ λλ₯΄λ©΄ GET μμ²νλλ‘ νκΈ°
import axios from 'axios';
function App(){
return (
<button className="btn btn-primary" onClick={()=>{
axios.get('https://codingapple1.github.io/shop/data2.json');
}}>μν λ보기</button>
)
}
- κ°μ¬λμ΄ https://codingapple1.github.io/shop/data2.json κ²½λ‘μ μ΄λ―Έ λ°μ΄ν°λ₯Ό λ§λ€μ΄λμ μνλΌ ν΄λΉ κ²½λ‘λ‘ GET μμ²μ ν΄μ£Όμλ€.
import axios from 'axios';
function App(){
return (
<button className="btn btn-primary" onClick={()=>{
axios.get('https://codingapple1.github.io/shop/data2.json')
.then(()=>{ μμ² μ±κ³΅ μ μ€νν μ½λ })
.catch(()=>{ μμ² μ€ν¨ μ μ€νν μ½λ })
}}>λ보기</button>
)
}
- μ΄μ GET μμ²μ ν΅ν΄ κ°μ Έμ¨ λ°μ΄ν°λ₯Ό μΆλ ₯νκ³ μΆμΌλ©΄ μμ κ°μ΄ μμ±νλ©΄ λλ€.
- .get() ν¨μλ₯Ό μ¬μ©νλ©΄ λ°λ‘ λ€μ .then() κ³Ό .catch() μ κ°μ ν¨μλ₯Ό μ°λ¬μ λΆμΌ μ μλ€.
- κ° ν¨μμλ μμ² μ±κ³΅ νΉμ μμ² μ€ν¨ μ μ€νν μ½λλ₯Ό μμ±ν΄μ£Όλ©΄ λλ€.
import axios from 'axios';
function App(){
return (
<button className="btn btn-primary" onClick={()=>{
axios.get('https://codingapple1.github.io/shop/data2.json')
.then((result)=>{ console.log(result.data) })
.catch(()=>{ μμ² μ€ν¨ μ μ€νν μ½λ })
}}>μν λ보기</button>
)
}
- μμ²μ΄ μ±κ³΅νμ λ λ°μ΄ν°λ₯Ό μΆλ ₯ν΄λ³΄κ³ μΆμΌλ©΄ μμ κ°μ΄ .then() μμ μ½λλ₯Ό μμ ν΄μ£Όλ©΄ λλ€.
- .then() μμ μ½λ°±ν¨μ μμ νλΌλ―Έν°(result) λ₯Ό μΆκ°νμ¬ μ½μμ°½μ μΆλ ₯ν΄λ³΄λ©΄ κ·Έκ² λ°λ‘ λ°μμ¨ λ°μ΄ν°μ΄λ€.
- κ·Έλ¦¬κ³ object νμ
μ λ°μ΄ν°λ₯Ό νμΈν΄λ³΄λ©΄ νμλ‘ νλ λ°μ΄ν°λΏλ§ μλλΌ μμ²μ΄ μ±κ³΅ν μ΄μ λ± μ¬λ¬κ°μ§ λ°μ΄ν°κ° λ€μ΄μλλ° νμν λΆλΆλ§ κΊΌλ΄μ΄ μ¬μ©νλ©΄ λλ€.
(λλ result μ λ΄κΈ΄ λ°μ΄ν° μ€ data λΆλΆλ§ νμν΄μ result.data λ§ μ¬μ©νλ€.)
- μΌλ° JavaScript λ¬Έλ²μΈ fetch() λ¬Έλ²λ κ±°μ λΉμ·νκ² μ¬μ© κ°λ₯νλ€.
- fetch(μμ²ν URL) κ³Ό κ°μ΄ μ¬μ©νλ©΄ λ°λ‘ GET μμ²μ ν΄μ£Όλ©°, κ·Έ λ€μ .then() μ λΆμΌ μ μλ κ²λ λμΌνλ€.
- λ¨, κ°μ Έμ¨ μλ£κ° JSON μ ννλΌλ©΄ axios λ μλμΌλ‘ object νμ μΌλ‘ λ³νν΄μ£Όμ§λ§, fetch() λ μλ λ³νμ΄ λμ§ μλλ€.
π€ GET μμ²μΌλ‘ λ°μμ¨ λ°μ΄ν°λ‘ μν λ μ΄μμ 3κ° μΆκ°νκΈ°
- μ΄μ GET μμ²μΌλ‘ λ°μμ¨ λ°μ΄ν°λ‘ μν λ μ΄μμμ μΆκ°ν΄λ³΄μλ€.
- μν λ μ΄μμμ μ΄λ―Έ Grid Component μ map() ν¨μλ‘ λ§λ€μ΄λμκΈ° λλ¬Έμ shoes λΌλ state μμ λ°μμ¨ λ°μ΄ν°λ₯Ό μΆκ°λ§ ν΄μ£Όλ©΄ map() ν¨μλ₯Ό ν΅ν΄ μν λ μ΄μμμ΄ μΆκ°λλ€.
function App() {
let [shoes, setShoes] = useState(Data);
return (
<div className="App">
<Route exact path='/'>
<Main shoes={shoes} setShoes={setShoes} />
</Route>
</div>
);
}
- μ΄μ μ shoes λΌλ state λ§ μ¬μ©ν μμ μ΄μκΈ° λλ¬Έμ shoes λΌλ state λ§ shoes λΌλ λ³μλͺ μΌλ‘ μ μ‘λ°μμλλ°, μ΄λ²μλ setShoes λΌλ state λ μ¬μ©ν΄μΌ ν΄μ setShoes λΌλ λ³μλͺ μΌλ‘ setShoes λΌλ state λ μ μ‘λ°μμλ€.
import axios from 'axios';
function App(){
return (
<button className="btn btn-primary" onClick={()=>{
axios.get('https://codingapple1.github.io/shop/data2.json')
.then((result)=>{
let newData = result.data;
props.setShoes([...props.shoes, ...newData]);
})
.catch(()=>{ μμ² μ€ν¨ μ μ€νν μ½λ })
}}>μν λ보기</button>
)
}
- then() μμ Ajax κ° μ±κ³΅νμ λμ μ½λλ₯Ό μμ±ν΄μ£Όμλ€.
- μ΄μ μλ array μλ£νμ state μ λ°μ΄ν°λ₯Ό μΆκ°ν λ, μλ³Έ array λ₯Ό 볡μ¬νμ¬ μ λ³μμ ν λΉν΄μ€ λ€μ κ·Έ λ³μμ μλ‘μ΄ λ°μ΄ν°λ₯Ό λ£μ΄ state λ³κ²½ ν¨μμ λ΄μμ£Όμμλ€.
- μ΄λ²μλ μλ‘κ³ λ λ²κ±°λ‘μ΄ λ°©μμΈ spread λ¬Έλ²μ νμ©νλ€.
- [...props.shoes, ...newData] μ κ°μ΄ μμ±νλ©΄ κ° props.shoes μ μλ£μ newData μ μλ£μ κ΄νΈλ₯Ό λ²κ²¨λ΄μ΄ λ°μ΄ν° νλνλλ₯Ό λκ΄νΈλ‘ κ°μΈμ array μλ£νμΌλ‘ λ§λ€μ΄μ€λ€.
- μ΄λ κ² λ§λ€λ©΄ λ³λμ μ¬λ³Έμ λ§λλ λ²κ±°λ‘μ΄ κ³Όμ μμ΄ νΈνκ² λ°μ΄ν°λ₯Ό μΆκ°νλ κ²μ΄ κ°λ₯νλ€.
728x90
λ°μν
'[κ°λ°] Practice > React' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[React] μμΈ νμ΄μ§μ μ¬κ³ λ°μ΄ν° νμνκΈ° (0) | 2022.03.26 |
---|---|
[React] React μμ Ajax μμ²νκΈ°_2 (1) | 2022.03.26 |
[React] useEffect κ³Όμ νκΈ° (0) | 2022.03.26 |
[React] useEffect μ¬μ©ν΄λ³΄κΈ° (0) | 2022.03.25 |
[React] CSS λμ SASS μ¬μ©ν΄λ³΄κΈ° (0) | 2022.03.25 |