UI ꡬμ±μ νμν λ°±μλ APIκ° μμ±λκΈ° μ μ νλ‘ νΈμλλ λ°μ΄ν°κ° λ€μ΄μ€λ μν©μ λλΉν΄ μλνλλ‘ UIκ° κ΅¬νλλμ§ νμΈμ ν΄μΌνλ€. μ΄λ μ¬μ©λλ λ°μ΄ν°κ° Mock Dataμ΄λ€.
μ¦, μ€μ APIμμ λ°μμ¨ λ°μ΄ν°κ° μλ νλ‘ νΈμλ κ°λ°μκ° νμμ μν΄ μνλ‘ λ§λ λ°μ΄ν°μ΄λ€.
λ°±μλ APIκ° λ―Έμμ±μΈ μν©μμ Mock Dataλ₯Ό μ¬μ©νμ§ μλλ€λ©΄, λλΆλΆμ μ€μ λ°μ΄ν°κ° λ€μ΄μ¬ λΆλΆλ€μ νλμ½λ©μΌλ‘ λ체νκ³ μμ μ νκ² λλ€. κ·Έλ κ² κ°λ°μ μ§ννλ€λ©΄ μ¬λ¬ λ¬Έμ κ° λ°μν μ μλ€.
μ°μ κ°λ°μ΄ μ§νλ¨μ λ°λΌ μ½λκ° νμ₯λ μνμ΄κΈ° λλ¬Έμ, λ°±μλ APIκ° μμ±λκ³ μ€μ λ°μ΄ν°λ₯Ό λ°μνλ μμ
μ μνν λ λ²κ±°λ‘μΈ μ μλ€.
λν, μ€μ λ°μ΄ν°μμλ μ‘΄μ¬νμ§ μλ κ°μ ν λλ‘ UIλ₯Ό κ·Έλ Έκ±°λ, λ°λλ‘ μ€μ λ°μ΄ν°λ₯Ό κΈ°λ°μΌλ‘ μμ
ν΄μΌ νλ λ΄μ©μ΄ λλ½λμμ μλ μλ€.
Mock Dataλ₯Ό μ¬μ©νλ©΄ μμ κ°μ λ¬Έμ λ₯Ό ν΄κ²°ν μ μλ€.
Mock Dataλ μ€μ μλ²μμ 보λ΄μ£Όλ λ°μ΄ν°μ νμκ³Ό λμΌνκ² λ§λ€μ΄μΌ νκΈ° λλ¬Έμ json νμ₯μ νμΌλ‘ JSON νμμ λ°μ΄ν°λ₯Ό μμ±νλ€.
JSONμ΄λ Java Script Object Notationμ μ€μλ§λ‘, λ¨μ΄ κΈ°μ€ κ·Έλλ‘ μλ°μ€ν¬λ¦½νΈλ₯Ό κ°μ²΄λ‘ ννν κ²μ΄λ€.
key : value μ κ°μ²΄ ννμ΄κ³ , λ°±μλμμ λ°μ΄ν° ν΅μ μ μν΄ μ¬μ©νλ νμμ΄λ€.
λ§μΌμ»¬λ¦¬ λ°μ΄ν°λ‘ μλ₯Ό λ€λ©΄ μ΄λ°μμΌλ‘ μ¬μ©ν μ μλ€.
// public/data/productData.json
{
"id": 3,
"image_url": "https://img-cf.kurly.com/shop/data/goods/1648203571907l0.jpg",
"name": "[μ½λ¦°μ€κ·Έλ¦°] λ μ€λ μ§ 1000mL",
"short_description": "λ¬Ό νλ°©μΈ λ£μ§ μκ³ μμν μ€λ μ§ κ³Όμ‘μ μ§λΈ 100% μ°©μ¦ μ€λ μ§ μ£Όμ€",
"discounted_price": 14080,
"discount_rate": 20,
"original_price": 17600,
"unit_text": "1λ³",
"weight": "1000ml",
"delivery_type": [
{ "id": 0, "text": "μλ³λ°°μ‘" },
{ "id": 1, "text": "νλ°°λ°°μ‘" }
],
...
}
Mock Dataλ μλ²μμ λ°μμ¬ λ°μ΄ν°μ λͺ¨μ‘° λ°μ΄ν°μΈ λ§νΌ νλ‘ νΈμλ κ°λ°μκ° λ‘컬 μλ²μμ Mock Dataλ₯Ό λ°μμ€λλ‘ κ΅¬νν΄μΌ νκΈ° λλ¬Έμ .json νμΌλ‘ μμ±ν΄μΌ νλ€.
Mock Dataλ λ‘컬 μλ²μμ λ°μμ€λλ‘ κ΅¬νν΄μΌ νκΈ° λλ¬Έμ νμΌμ μμΉλ npm startμ λ‘컬 μλ²μ μ¬λΌκ°λ ν΄λμΈ public ν΄λ νμμμ κ΄λ¦¬ν΄μΌ νλ€. public ν΄λ νμμ data ν΄λ μμ± ν ν΄λΉ ν΄λμμ Mock Dataλ₯Ό κ΄λ¦¬νλ€.
Mock Dataλ μ€μ λ°μ΄ν°μ λμΌνκ² fetch λ©μλμμ νΈμΆνλ€.
fetch λ©μλμ 첫 λ²μ§Έ μΈμλ‘ http μμ²μ λ³΄λΌ API μ£Όμλ₯Ό λ°λλ°, μ¬κΈ°μ μμ±ν Mock Dataμ μ£Όμλ₯Ό μ
λ ₯νλ€. http://localhost:3000μ μλ΅ κ°λ₯νλ©° μλ΅ μνκ³ μ¬μ© μ, λ‘컬 μλ²κ° μ¬λ¬κ° μ΄λ €μλ€λ©΄ μλ‘μ΄ λ‘컬 μλ²λ₯Ό μ€νν λλ§λ€ ν¬νΈλ²νΈκ° λ°λκ² λμ΄ μΌμΌμ΄ μμ μ ν΄μΌνλ€.
fetch('/data/recommendData.json', {
method: 'GET'
})
λ λ²μ§Έ μΈμλ μμ²μ λ³΄λΌ λμ μ΅μ κ°μ²΄λ₯Ό μ λ¬νλ λΆλΆμ΄λ€. μμ μ½λμΈ κ²½μ° μλ²λ‘λΆν° λ°μ΄ν°λ₯Ό λ°μμ€λ GET μμ²μ΄κΈ° λλ¬Έμ methodμ΅μ μ λͺ μν΄μ£Όμλ€. (λλΆλΆμ κ²½μ° methodκ° GETμΌ λ μλ΅ κ°λ₯)
fetch('/data/recommendData.json', {
method: 'GET'
})
.then(res => res.json())
.then(data => {
setProductList(data);
});
μ΄ν JSON ννμ response λ°μ΄ν°λ₯Ό μλ°μ€ν¬λ¦½νΈ κ°μ²΄ ννλ‘ λ°κΏμ€ λ€μ, λ°μμ¨ λ°μ΄ν°λ₯Ό νλ©΄μ κ·Έλ €μ£ΌκΈ° μν΄ productList stateλ₯Ό μ λ°μ΄νΈ ν΄μ€λ€.
fetch λ©μλλ₯Ό ν΅ν΄ Mock Dataλ₯Ό λ°μμ€λ μμ μ μ€μ λ‘ λ°μ΄ν°λ₯Ό λΆλ¬μ€λ μμ μ΄ μΈμ μΈμ§μ λ°λΌ λ€λ₯΄λ€. λ²νΌμ ν΄λ¦νμ λ λ°μμμΌ νλ κ²½μ°λ μκ³ , νμ΄μ§λ₯Ό λΆλ¬μ¬ λ λ°λ‘ νλ©΄μ κ·Έλ €μ€μΌ νλ κ²½μ°λ μγ·.
useEffect(() => {
fetch('/data/recommendData.json', {
method: 'GET'
})
.then(res => res.json())
.then(data => {
setProductList(data);
});
},[]);
μμ μ½λλ νμ΄μ§λ₯Ό λΆλ¬μ¬ λ λ°λ‘ νλ©΄μ κ·Έλ €μ€μΌνλ€. κ·Έλ¬λ―λ‘ useEffect hookμ ν΅ν΄ μ»΄ν¬λνΈκ° λ§μ΄νΈ λ ν νλ²λ§ λ°μ΄ν°λ₯Ό λ°μμ€λλ‘ νλ€.
fetch methodλ λ°λμ useEffectμ ν¨κ» μ¬μ©ν΄μΌλ§ νλ κ²μ μλλ€.