[ReactJS] 상수 데이터 & Mock Data + fetch 매소드

2023. 1. 24. 15:37·◼ FrontEnd/ReactJS
반응형

상수 데이터란?

  • 변하지 않는 데이터
  • React에서 데이터는 UI이다.

  • 시간이 흐름에 따라 변하는 변수 데이터로 UI를 만들 땐 백엔드 서버에서 데이터를 받아와야 한다.
  • 반면 변하지 않는 상수 데이터로 UI를 만들 땐 백엔드 서버에서 데이터를 받아올 필요가 없다.

 

상수 데이터 활용하기

/* App.js */
import React from "react";

const MENU_LIST = [
  { id: 1, menuName: "New Repository" },
  { id: 2, menuName: "Import Repository" },
  { id: 3, menuName: "New Gist" },
  { id: 4, menuName: "New Organization" },
  { id: 5, menuName: "New Project" },
];

const App = () => {
  return (
    <div>
      <ul>
        {MENU_LIST.map((menuList) => {
          return <li key={menuList.id}>{menuList.menuName}</li>;
        })}
      </ul>
    </div>
  );
};
  • 반복되는 UI 구조는 상수 데이터와 map 매서드를 활용해 간결히 나타낼 수 있다.
  • 이렇게 할 경우, 상수 데이터를 추가하거나 삭제하려면 JSX를 건드릴 필요 없이 상수 데이터 값만 바꾸면 된다.

/* App.js */
import React from "react";
import { MENU_LIST } from "./uiData";

const App = () => {
  return (
    <div>
      <ul>
        {MENU_LIST.map((menuList) => {
          return <li key={menuList.id}>{menuList.menuName}</li>;
        })}
      </ul>
    </div>
  );
};
/* uiData.js */
export const MENU_LIST = [
  { id: 1, menuName: "New Repository" },
  { id: 2, menuName: "Import Repository" },
  { id: 3, menuName: "New Gist" },
  { id: 4, menuName: "New Organization" },
  { id: 5, menuName: "New Project" },
];
  • 상수 데이터가 만일 너무 길어 가독성을 해치는 경우 위처럼 별도의 파일로 분리해서 관리할 수도 있다.

 


Mock Data란?

  • 프론트엔드 개발자가 필요에 의해 백엔드 API처럼 만든 UI (흉내낸) 데이터이다.
  • 그렇기 때문에, Mock Data를 만들 땐 백엔드 API의 구조를 우선적으로 확인해야 한다.
  • (API의 key-value를 확인한다. 그 후 json 확장자 명으로 Mock Data를 만든다.)

  • 생성한 Mock Data는 public 폴더 하위의 data 폴더에서 관리한다.
    • Mock Data는 서버에서 받아올 데이터의 모조 데이터이므로로컬 서버에서 받아오도록 구현해야 한다.
    • 그렇기 때문에 npm start 시 로컬 서버에 올려지는 폴더인 public 폴더의 하위에서 관리해야 한다.

Mock Data의 구조

  • Mock Data 에시
// 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입",
    ...
  },
...
]

 

Mock Data를 쓰는 이유

  • 백엔드 API가 미완성인 상태에서도 차질없이 개발을 진행하기 위해서이다.
  • Mock Data를 쓰면 실제 API가 없더라도 API 데이터처럼 UI 랜더링이 가능해진다.
  • API가 완성된 이후에 Mock Data에서 실제 API로 원활한 수정이 가능하다.

 


fetch 매서드

  • Mock Data를 만들고 난 후 이를 호출할 때 쓰이는 매서드이다.
    fetch("/data/파일명.json");
    • 파일의 경로는 public 폴더를 기준으로 적는다.
    • public 폴더 하위 data 폴더에 Mock Data 파일이 있기 때문에 위와 같이 경로를 적어준다.
  • (실제 API를 호출할 때도 fetch 매서드를 쓴다.)

Step 1. Mock Data 받아 state에 저장하기

  • fetch 호출 이후에 then() 매서드를 두 번 호출한다.
    • 첫 번째 .then 매서드에 인자로 callBack을 전달하고 JSON 형태의 데이터가 들어온다. 이 데이터를 자바스크립트 형태로 변환하고 반환한다.
    • 두 번째 .then에서는 인자로 callBack을 전달하고, 매개변수에서는 첫 번째 .then에서 반환된 객체를 result로 받아 setState 함수로 result를 state에 저장한다.
  • fetch("/data/파일명.json")
      .then(response -> response.json())
      .then(result => setState(result));
  • 이렇게 하면 state에 Mock Data를 저장하고, 언제든 꺼내 쓸 수 있게 되었다.
  • 하지만 아직 이를 호출하는 작업은 하지 않았는데, 이는 상황에 맞춰 진행하면 된다.

Step 2. 받아온 Mock Data 호출하기

  • 데이터를 호출하는 시점은 상황에 따라 각기 다르다.
    • 버튼을 클릭했을 때 UI가 그려져야 하는 경우도 있고, 페이지를 불러올 때 바로 화면에 UI를 그려줘야 하는 경우도 있다.
    • 이 때 전자는 이벤트 함수 내에서, 후자는 useEffect 안에서 fetch 매서드를 호출하면 된다.



fetch 매서드 심화

  • fetch 매서드의 두 번째 인자로 options 객체를 줄 수 있다.
fetch("/data/sliderData.json", {
  method: "GET",
})
  .then((response) => response.json())
  .then((data) => {
    setSliderData(data);
  });
fetch(url, options)
  .then(response => response.json())
  .then(result => /* 결과 처리 */)

  • options 객체에는 HTTP 방식(method), HTTP 요청 헤더(headers), HTTP 요청 전문(body) 등을 설정해줄 수 있다.
    • method (HTTP 방식)
      • GET 호출 : 서버(원격 API)에서 데이터 수신
      • POST 호출 : 서버(원격 API)로 데이터 전송, 원격 API에서 관리하고 있는 데이터 생성
      • PUT, DELETE 호출 : 서버에 요청, 원격 API에서 관리하는 데이터의 수정 또는 삭제
    • headers (HTTP 요청 헤더)
      • fetch에 요청 헤더를 설정
      • 사용자 Access Token과 같은 메타 데이터를 담아 전송
    • body (HTTP 요청 전문)
      • JSON 문자열이나 FormData 객체와 같은 데이터를 본문에 담아 전송

  • 응답(response) 객체로 부터는 HTTP 응답 상태(status), HTTP 응답 헤더(headers), HTTP 응답 전문(body) 등을 읽어올 수 있다.

 
반응형

'◼ FrontEnd > ReactJS' 카테고리의 다른 글

[ReactJS] Dynamic Routing & Query String  (0) 2023.01.24
[ReactJS] Component의 분리와 재사용 (관심사의 분리)  (0) 2023.01.24
[ReactJS] Side Effect와 useEffect  (0) 2023.01.24
[ReactJS] Hook & State & Props  (0) 2023.01.24
[ReactJS] SPA & Routing  (0) 2023.01.22
'◼ FrontEnd/ReactJS' 카테고리의 다른 글
  • [ReactJS] Dynamic Routing & Query String
  • [ReactJS] Component의 분리와 재사용 (관심사의 분리)
  • [ReactJS] Side Effect와 useEffect
  • [ReactJS] Hook & State & Props
SangYoonLee (SYL)
SangYoonLee (SYL)
Slow, But Steady Wins The Race 😎
◆ Slow, But Steady ◆Slow, But Steady Wins The Race 😎
    반응형
  • SangYoonLee (SYL)
    ◆ Slow, But Steady ◆
    SangYoonLee (SYL)
  • 전체
    오늘
    어제
    • ◻ 전체 글 수 : (133)
      • ✪ 취미, 경험 회고 및 일상 (26)
        • [취미] Room Escape (2)
        • [회고] IT 관련 경험 회고 (18)
        • [일상] 일상 생각 (4)
        • [일상] 독후감 (1)
      • ◼ FrontEnd (31)
        • Web & HTML, CSS (10)
        • JavaScript (4)
        • TypeScript (1)
        • ReactJS (16)
      • ◼ CS (3)
        • 자료구조 & 알고리즘 (1)
        • 컴퓨터 구조 (1)
        • 운영체제 (1)
      • ◼ PS Note (40)
        • 백준 (38)
        • 프로그래머스 (2)
      • ◼ IT Etc. (33)
        • (Until 2021) (21)
        • Python (6)
        • C | C# | C++ (1)
        • Git (1)
        • Unity (4)
        • Game Dev. (0)
  • 블로그 메뉴

    • 홈
    • 💻 GitHub
    • 🟢 Velog
    • 🧩 온라인 방탈출 출시 작품 모음
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    JavaScript
    알고리즘
    C++
    백준
    방탈출고사
    프로그래머스
    1929
    관심사의 분리
    개인 프로젝트
    프로젝트
    코드숨
    회고
    주간 회고
    Python
    미궁 게임
    pygame
    더라비린스
    소수 구하기
    Component
    wecode
    React
    unity
    코딩 일기
    유니티
    Cpp
    CodeSoom
    후기
    파이썬
    위코드
    리엑트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
SangYoonLee (SYL)
[ReactJS] 상수 데이터 & Mock Data + fetch 매소드

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.