list 를 랜더링 하는 방법에 대해서 알아보자

react 에서 리스트를 랜더링 하려면 먼저 아래 문법을 이해해야한다.

const arr = ["사과", "포도", "토마토", "오랜지", "참외"];
const arr_close = arr.map((fruit, index) => {
  if (index === 0) {
    return "먹다 남은 사과";
  }
  return fruit;
});

console.log(arr_close); // ["먹다 남은 사과", "포도", "토마토", "오랜지", "참외"]

보통 리스트를 랜더링 할때 .map 을 사용하게 되는데, .map 은 return 한 객체를 반환 한다.

이 속성을 이용해서 랜더링을 해보자.

먼저 List 라는 컴포넌트를 만들자

// src/List.js
import React from "react";

const List = () => {
  return (
    <ul>
      {/* @start loop */}
      <li>
        <p>나이: 32</p>
        <p>이름: 홍길동</p>
      </li>
      {/* @end loop */}
    </ul>
  );
};

export default List;

@start loop ~ @end loop 까지가 하나의 아이템이 된다.

그리고 App.js 에서 List 를 랜더링 해주자

import React, { Component } from "react";
import List from "./List";

class App extends Component {
  render() {
    return (
      <div className="App">
        <List />
      </div>
    );
  }
}

export default App;

자, 이제 데이터를 만들자. data 는 json 파일로 만들어 보도록 하겠다.

// src/data.json
{
  "users": [
    {
      "id": 1,
      "name": "홍길동",
      "age": 32
    },
    {
      "id": 2,
      "name": "홍길순",
      "age": 28
    },
    {
      "id": 3,
      "name": "김제프",
      "age": 33
    },
    {
      "id": 4,
      "name": "이제프",
      "age": 37
    },
    {
      "id": 5,
      "name": "제프온라인",
      "age": 45
    },
    {
      "id": 6,
      "name": "소녀시대",
      "age": 28
    },
    {
      "id": 7,
      "name": "방탄소년단",
      "age": 27
    }
  ]
}

그 다음 json 데이터를 불러오자

import React from "react";
import { users } from "./data.json";

const List = () => {
  return (
    <ul>
      {/* @start loop */}
      <li>
        <p>나이: 32</p>
        <p>이름: 홍길동</p>
      </li>
      {/* @end loop */}
    </ul>
  );
};

export default List;

그 다음 불러온 데이터를 아까 설명 한 .map 을 이용해서 루프를 돌리자.

import React from "react";
import { users } from "./data.json";

const List = () => {
  return (
    <ul>
      {/* @start loop */}
      {users.map(user => (
        <li>
          <p>나이: 32</p>
          <p>이름: 홍길동</p>
        </li>
      ))}
      {/* @end loop */}
    </ul>
  );
};

export default List;
// 이 두개는 서로 같은 코드다
users.map(user => (...));

// and

users.map(user => {
    return user;
});

그 다음 <p></p> 값을 교체 해 주면 된다.

import React from "react";
import { users } from "./data.json";

const List = () => {
  return (
    <ul>
      {/* @start loop */}
      {users.map(user => (
        <li key={user.id}>
          <p>나이: {user.age}</p>
          <p>이름: {user.name}</p>
        </li>
      ))}
      {/* @end loop */}
    </ul>
  );
};

export default List;

그럼 올바르게 랜더링 된 것을 확인 할 수 있다

주의! react 에서는 loop 를 돌릴때, 루프 안의 최상위 컴포넌트에 key props 를 전달 해 주어야 한다. 위 코드에서는 <li key={user.id}> 가 그것이다.