- Data 활용의 필요성을 이해하고, 상수 데이터와 Mock Data를 구분할 수 있다.
- 상황에 맞게 올바른 형식의 데이터를 활용할 수 있다.
- Array.map() 메서드를 사용해 반복되는 UI를 처리할 수 있다.
- 상수 데이터를 활용해 정적인 UI를 구성할 수 있다.
- Mock Data를 활용해 백엔드 API를 모방하여 개발을 진행할 수 있다.
Array.map()
메서드와 조합해서 반복되는 UI를 간결하게 표현.UPPER_SNAKE_CASE
네이밍 컨벤션을 따라 배열로 생성(id 필수)const FOOTER_LIST = [
{ id: 1, text: 'Westagram 정보 ·' },
{ id: 2, text: '지원 ·' },
.
.
.
{ id: 11, text: '언어' },
];
<footer>
<p>
{FOOTER_LIST.map(info => (
<span key={info.id}>{info.text}</span>
))}
</p>
<span>© 2023 WESTAGRAM</span>
</footer>
[ 컴포넌트 외부 작성 예시 ]
const Footer = () => {
return (
<footer>
<p>
{FOOTER_LIST.map(info => (
<span key={info.id}>{info.text}</span>
))}
</p>
<span>© 2023 WESTAGRAM</span>
</footer>
);
};
export default Footer;
const FOOTER_LIST = [
{ id: 1, text: 'Westagram 정보 ·' },
{ id: 2, text: '지원 ·' },
.
.
.
{ id: 11, text: '언어' },
];
[ .js
파일로 분리 ]
export
작성export const FOOTER_LIST = [
{ id: 1, text: 'Westagram 정보 ·' },
{ id: 2, text: '지원 ·' },
.
.
.
{ id: 11, text: '언어' },
];
import React from 'react';
import { FOOTER_LIST } from './data'; //상수데이터 import
const Footer = () => {
return (
<footer>
<p>
{FOOTER_LIST.map(info => (
<span key={info.id}>{info.text}</span>
))}
</p>
<span>© 2023 WESTAGRAM</span>
</footer>
);
};
export default Footer;
.json
형식의 데이터를 생성// public/data/recommendData.json
[
{
"id": 1,
"name": "[돈마루] 한돈 삼겹살 2종 (냉장)",
"discount_rate": 5,
"discounted_price": 12967,
"original_price": 13650,
"is_sold_out": false
},
{
"id": 2,
"name": "엔다이브 2~3입",
...
},
...
]
public
└── data
├── recommendData.json
├── productData.json
└── ...
fetch('http://localhost:3000/data/recommendData.json')
fech 메서드의 첫번째 인자로 http 요청을 보낼 API 주소를 받는데, 여기에 우리가 생성한 Mock Data 주소를 입력
두 번째 인자는 요청의 옵션 값들로 필요에 따라 객체 형태로 넣을 수 있는데, method
, headers
, body
, mode
, credentials
, omit
, same-origin
, include
, cache
, redirect
, referrer
, referrerPolicy
, integrity
, keepalive
, signal
등의 key와 각각 해당하는 value를 넣을 수 있다. 여기서 중요한 건, 클라이언트의 입장에서 서버에게 요청하는 것
첫번째 then에서는 JSON 형태 response 데이터를 js객체 형태로 바꿔줌.
두번째 then에서는 받아온 데이터를 화면에 그려주기 위해 state에 업데이트 해줌(get이라면 업뎃 전 console.log 찍어서 잘 들어왔는지 확인)
fetch('/data/recommendData.json', {
method: 'GET'
})
.then(res => res.json())
.then(data => {
setProductList(data);
});
버튼을 클릭했을때 받아와야하는 경우
- fetch 메서드를 담은 함수 생성
- 버튼에 onClick 속성을 활용하여 함수 호출
페이지를 불러올때 바로 화면에 그려줘야하는 경우.
- useEffect를 통해 컴포넌트가 마운트(최초로 화면에 그려짐)된 후 한번만 데이터를 받아오도록 함(의존성배열 빈배열로)
useEffect(() => {
fetch('/data/recommendData.json', {
method: 'GET'
})
.then(res => res.json())
.then(data => {
setProductList(data);
});
},[]);