π axios κ΄λ ¨ μ’μ κΈλ€ λͺ¨μ
π axios-http.com
π Inpa Dev
μ§κΈκΉμ§ λ°λλΌ JS건, 리μ‘νΈκ±΄ λͺ¨λ μλ²κ° μλ νκ²½μμ μμ μ νλ€ λ³΄λ μλ‘κ³ μΉ¨μ νλ©΄ μλμΌλ‘ κ°μ΄ λ μκ°κΈ° μΌμ€μλ€.
νμ§λ§ λ°μ κ°μ μ μ₯ν μ μλ€λ©΄ μΌλ§λ μ’μκΉ?
μ΄λ² ν¬μ€ν μμλ μλ²μ μν΅μ νκΈ° μν μ§κ²λ€λ¦¬λ₯Ό λμ μ€, Axios λΌμ΄λΈλ¬λ¦¬μ λν΄ μμ보μ!
Axiosλ node.jsμ λΈλΌμ°μ λ₯Ό μν Promise κΈ°λ° HTTP ν΄λΌμ΄μΈνΈ μ λλ€. κ·Έκ²μ λν μ λλ€(λμΌν μ½λλ² μ΄μ€λ‘ λΈλΌμ°μ μ node.jsμμ μ€νν μ μμ΅λλ€). μλ² μ¬μ΄λμμλ λ€μ΄ν°λΈ node.jsμ http λͺ¨λμ μ¬μ©νκ³ , ν΄λΌμ΄μΈνΈ(λΈλΌμ°μ )μμλ XMLHttpRequestsλ₯Ό μ¬μ©ν©λλ€.
axios 곡μ ννμ΄μ§μμλ μμ κ°μ μ€λͺ
μ λ³Ό μ μλ€.
Promise κΈ°λ° HTTP ν΄λΌμ΄μΈνΈ λΌλ λ¬Έκ΅¬κ° ν¬μΈνΈλΌκ³ μκ°λλ€.
μ¬μ©μλ‘ λΆν° κ°μ λ°μμ μλ²λ‘ 보λ΄μ μ μ₯ μν¨ ν, κ·Έ κ°μ 리μ€νΈν ν΄μ νλ©΄μ λΏλ €μ£Όκ³
μνλ κ°μ μΆκ°, μμ , μμ κΉμ§...! μ΄ λͺ¨λ κ±Έ CRUDλΌκ³ νλ€.
λλΆλΆμ μ»΄ν¨ν° μννΈμ¨μ΄κ° κ°μ§λ κΈ°λ³Έμ μΈ λ°μ΄ν° μ²λ¦¬ κΈ°λ₯μΈ Create(μμ±), Read(μ½κΈ°), Update(κ°±μ ), Delete(μμ )λ₯Ό λ¬Άμ΄μ μΌμ»«λ λ§μ΄λ€ - https://ko.wikipedia.org/wiki/CRUD
νν μ°λ¦¬κ° λΈλ‘κ·Έλ μΉ΄νμμ νλ λμλ€μ΄λΌκ³ μκ°νλ©΄ λλ€.
κΈμ μ°κ³ (Create) μ΄ κΈλ€μ μ½κ³ (Read) μ€νλ₯Ό λ°κ²¬νλ©΄ μμ μ νκ³ (Update) μ΄μν κ²μκΈμ μ κ±°νκ³ (Delete)... μ΄λ° λμλ€ λ§μ΄λ€.
맨 μ²μμλ λ§νμ§λ§, Axiosλ λΌμ΄λΈλ¬λ¦¬μ΄κΈ° λλ¬Έμ μ°λ¦¬κ° μλ²μ ν¨κ» 무μΈκ°λ₯Ό ν λ μ’ λ νΈλ¦¬νκ³ μ§κ΄μ μΈ λ©μλλ€μ μ 곡νλ€. CRUDμ λ§μΆ°μ μ΄λ€ λ©μλλ€μ΄ μλμ§ νλ² μμ보μ.
axios.post()λ μΆκ°λ₯Ό ν΄μ£Όλ ν¨μμ΄λ€.
()μμλ μλ²μμ κ²½λ‘, μΆκ°ν λ΄μ©μ μμλλ‘ λ΄μμ£Όλ©΄ λλ€.
const onSubmitHandler = async () => {
axios.post('http://localhost:4001/todos', inputValue);
// setTodos([...todos, inputValue]); // μ€μκ° λ°μμ μν΄ μ
λ°μ΄νΈ
fetchTodos(); // λ€μ DBλ₯Ό μ½μ΄μ€κ²λ νλκ² μ’ λ μ’λ€!
}
axios.get()μ μ‘°νλ₯Ό νλ ν¨μμ΄λ€.
()μμλ μλ²μμ κ²½λ‘λ₯Ό λ΄μμ£Όλ©΄ λλ€.
νμ§λ§ μ‘°νλΌλ건 μλ²μ μλ λ°μ΄ν°λ₯Ό κ°μ Έλ€κ° 보μ¬κΈ°μ£Όλ κ²μ΄κΈ° λλ¬Έμ axios.get() λ©μλλ₯Ό μ¬μ©νκΈ° μ , awaitλ₯Ό κΌ μ¬μ©ν΄ μ€μΌνλ€.
μ°Έκ³ λ‘ awaitλ νλ©΄μ μ‘°νλ₯Ό νκΈ° μ μ μ°μ μλ²λ‘λΆν° λ°μ΄ν°λ₯Ό λ°μλκΉμ§ κΈ°λ€λ €! νλ μ©λμ΄λ€.
const fetchTodos = async () => {
const {data} = await axios.get('http://localhost:4001/todos'); // λλ λ κΉμ§ κΈ°λ€λ €μ€λ€. (pendingμ΄ λ¨λ μ΄μ )
setTodos(data);
}
axios.patch()λ μμ μ νλ ν¨μμ΄λ€.
()μμλ μλ² κ²½λ‘, μμ ν κ²μ μμλλ‘ λ΄μμ£Όλ©΄ λλ€.
μ¬κΈ°μλ 'μ΄λ€ κ²'μ κΈ°μ€μΌλ‘ μμ μ ν μ§λ₯Ό μ ν΄μΌ νκΈ° λλ¬Έμ λ³΄ν΅ κ²½λ‘λ₯Ό λ°±ν±μΌλ‘ λ¬Άμ΄μ κ²½λ‘ λμ ${}λ₯Ό μ΄μ©ν΄ 'μ΄λ€ κ²'μ λ£λλ€.
κ·Έλ¦¬κ³ mapν¨μλ₯Ό μ΄μ©ν΄μ ν΄λΉ κ°λ§ μμ ν μ μλλ‘ νλ©΄ λλ€.
const onUpdateButtonClickHandler = async () => {
axios.patch(`http://localhost:4001/todos/${targetId}`, {
title : contents
})
setTodos(
todos.map((item)=>{
if (item.id == targetId){
return {...item, title : contents}
} else {
return item;
}
}))
}
axios.delete()λ μμ λ₯Ό νλ ν¨μμ΄λ€.
()μμλ μλ² κ²½λ‘, μμ ν κ²μ μμλλ‘ λ΄μμ£Όλ©΄ λλ€.
deleteλ 'μ΄λ€ κ²'μ κΈ°μ€μΌλ‘ μμ μ ν μ§λ₯Ό μ ν΄μΌ νκΈ° λλ¬Έμ κ²½λ‘μ λ°±ν±μ λ£κ³ λμ ${}λ₯Ό μ΄μ©ν΄ 'μ΄λ€ κ²'μ λ£μ΄ μ€λ€.
κ·Έλ¦¬κ³ filterν¨μλ₯Ό μ¬μ©ν΄μ μΌμΉνμ§ μλ λλ¨Έμ§λ§ 보μ¬μ§κ² νλ©΄ λλ€.
μμμ½λ
const onDeleteClickHandler = async (id) => {
axios.delete(`http://localhost:4001/todos/${id}`);
setTodos(todos.filter((item)=> {
return item.id !== id;
}))
}