개발자

React에서 여러 API의 데이터를 합쳐서 사용하는 좋은 방법 추천해주세요.

2023년 04월 12일조회 319

여러 API에서 데이터를 가져와 프론트엔드에서 하나의 상태로 처리하려는 상황입니다. 이 경우, 각 API의 컬럼이 다르더라도 프론트엔드에서 공통 컬럼들만 합치려고 합니다. 예를 들어: API1: a, b, c의 값 API2: a, d, e의 값 API3: a, f, g의 값 이걸 하나의 상태로 처리하고 싶으면 어떻게 하는 방법이 좋을까요???

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 3

김인후님의 프로필 사진

Map 함수 사용하셔서 같은 포멧으로 만드신 후에 스프레드 하시면 될 거 같습니다:) [...a, ...b, ...c]

profile picture

익명

작성자

2023년 04월 13일

시도해 보겠습니다! 감사합니다!

김현WOO님의 프로필 사진

여력이 된다면 BFF를 도입하는 것도 방법일 것 같습니다. 컴포넌트에서만 보기에 하나로 쓰는 것처럼 보이도록 커스텀 훅을 만들어 쓰는 것도 방법이겠네요.

profile picture

익명

작성자

2023년 04월 13일

좋은 의견 감사합니다!

커리어리 AI 봇님의 프로필 사진

여러 API에서 가져온 데이터를 합치는 방법은 여러 가지가 있습니다. 다음은 그 중 몇 가지 방법을 소개해드립니다. 1. Promise.all()을 사용하여 각 API에서 데이터를 가져와 합치는 방법 아래 예시에서는 각 API에서 데이터를 가져와서 Promise.all()을 사용하여 모든 API에서 가져온 데이터를 배열로 합친 후, reduce()를 사용하여 중복되는 데이터를 찾아 공통 컬럼만을 가지고 있는 하나의 객체로 합치는 방법을 사용하였습니다. 2. RxJS를 사용하여 각 API에서 데이터를 가져와 합치는 방법 아래 예시에서는 RxJS의 forkJoin()을 사용하여 각 API에서 데이터를 가져오고, mergeMap()을 사용하여 배열을 평면화한 후, reduce()를 사용하여 중복되는 데이터를 찾아 공통 컬럼만을 가지고 있는 하나의 객체로 합치는 방법을 사용하였습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#1
import { forkJoin, from } from 'rxjs';
import { map, mergeMap, reduce } from 'rxjs/operators';

const api1$ = from(fetch('https://api1.com').then(res => res.json()));
const api2$ = from(fetch('https://api2.com').then(res => res.json()));
const api3$ = from(fetch('https://api3.com').then(res => res.json()));

forkJoin([api1$, api2$, api3$])
  .pipe(
    mergeMap(data => data),
    reduce((acc, cur) => {
      const { a, ...rest } = cur;
      if (acc[a]) {
        acc[a] = { ...acc[a], ...rest };
      } else {
        acc[a] = rest;
      }
      return acc;
    }, {})
  )
  .subscribe(data => setMergedData(data));

#2
import { merge } from 'lodash';

const api1 = fetch('https://api1.com').then(res => res.json());
const api2 = fetch('https://api2.com').then(res => res.json());
const api3 = fetch('https://api3.com').then(res => res.json());

Promise.all([api1, api2, api3]).then(data => {
  const mergedData = merge({}, ...data);
  setMergedData(mergedData);
});

커리어리 AI 봇의 답변을 평가해 주세요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!