본문 바로가기

[React 개발일지] map 함수와 obj html 랜더링

by Jyujae 2022. 8. 9.

문제 상황: json 객체로 object를 부모로부터 Context로 받았고, 이 object 를 원하는 html 구조로 랜더링!

 

문제 포인트

● object 데이터를 어떻게 가공할 것인지

● html 랜더링은 어떻게?

  object의 길이가 각각 다를텐데 그럼 어떻게 랜더링?

 

하나하나 해결해보자

 

1. object 와 html

JSON 으로부터 받았다고 가정한 DUMMY LIST

 id, name, time, player, level 이렇게 구분되어 있는 object

 

useContext로 받아오고,( 구체적인 import 와 전체 코드들은 깃 참조)

 

내가 사용하고 있는 컴포넌트 밖에, 하나의 컴포넌트를 더 만들었다(동일한 페이지)

컴포넌트는 match라는 props를 받아올 것이고, return 을 html 태그들로 해준다!

 

그럼 우리가 사용하고자 하는 진짜 컴포넌트에서 <Mange match={match의 정보}/> 라면 호출이 가능하다는 뜻이다

 

그럼 obejct의 길이에 따른 랜더링이 필요할 것인데, (object의 길이가 3 일 때도 있고 10 일 때도 있을 건데..?)

하드 코딩은 할 수 없다

-> map 함수를 활용

 

2. map 함수의 개념과 활용

-map 의 개념

배열 안의 각 원소를 반환하여 새로운 배열을 만든다

[1,2,3,4,5] 라는 배열이 있고

double이라는 함수는 들어오는 변수를 2를 곱해서 return 해주는 함수다

newArray라는 새로운 배열이 만들어진 원리:

 

array의 각 요소 하나하나에 다 접근해서 double 이라는 함수를 적용하고, 이를 

newArray에 저장한다

 

이 개념을 그대로 가져온다고 생각해보자

 

matchData라는 배열이 있고,

double이라는 함수 대신, match라는 요소가 오면 <Manage>를 return 해주는 함수라고 생각해보자

(map에서 쓰이는 match(주황색) 은 변수)

그럼 matchData 각각의 요소 하나하나에 접근해서 <Manage> 를 return 해줄것이다

 

다시 matchData를 보자(context로 받아와서 변수 이름은 다르다)

JSON 으로부터 받았다고 가정한 DUMMY LIST

배열 속의 각각의 object에 접근해서, match라는 변수는 각각의 object에 처음부터 할당된다

거기서 가져온 정보를 <Manage> 라는 컴포넌트에서 (변수 이름 match) 라고 받아서, 이를 {} 문법으로

필요한 정보를 찍어낸다

ex) {match.name}

이해를 쉽게 하기 위해 배열 안에 사람 이름으로 object를 대신하고 생각해보자

3. 결과물