What I Learnd/TIL

TIL - 반복되는 컴포넌트 간결하게 처리하기(map, filter)

키싸 2023. 6. 14. 15:00

아래와 같은 App.js 코드가 있다.

import React from "react";

const App = () => {
  return (
    <div className="app-style">
      <div className="squareStyle">a</div>
      <div className="squareStyle">b</div>
      <div className="squareStyle">c</div>
      <div className="squareStyle">d</div>
      <div className="squareStyle">e</div>
    </div> // 이러한 반복적인 같은 형식의 나열을 간결하게 만들어주자.
  );
};

export default App;

같은 형태의 컴포넌트가 반복적으로 나열되고 있는데, 이러한 컴포넌트를 이렇게 나열해주는건 비효율적으로 간결하게만들어보자.


1. map 함수를 활용해서 간결하게 만들어줄 수 있다.

import React from "react";

const App = () => {
  const testArr = ["a", "b", "c", "d", "e"]; // array 추가

  return (
    <div className="app-style">
      {/* 기존에 있던 갯수만큼 다 return 해주는 map 함수 사용 */}
      {testArr.map(function (i) {
        return <div className="squareStyle">{i}</div>;
      })}
    </div>
  );
};

export default App;

javaScript 함수를 사용할거니까 return 안에 {} 중괄호 열어주는 것 잊지않기!


2. filter 를 사용해서 원하는 item만 가지고 와보자

import React from "react";
import "./App.css";

const App = () => {
  const testArr = ["a", "b", "c", "d", "e"];
  
// filter 함수는 return 뒤에 반드시 조건이 들어가므로 원하는 조건을 아래와 같이 명시
// 적용된 값을 기존의 형태로 불러와주기 위해서는 다시 map 함수로 정렬
  return (
    <div className="app-style">
      {testArr
        .filter((i) => {
          return i !== "c";
        })
        .map((i) => {
          return <div className="squareStyle">{i}</div>;
        })}
    </div>
  );
};

export default App;

 


Each child in a list should have a unique "key" -> map 함수와 key value

 

기존 코드: 모든 child는 각자의 유니크 키값을 가져야한다는 warning!

"모든 map 함수에는 고유의 key value가 필요하다."

import React from "react";
import "./App.css";

const App = () => {
  const users = [
    { id: 1, age: 30, name: "Richard" },
    { id: 2, age: 24, name: "James" },
    { id: 3, age: 11, name: "Amy" },
    { id: 4, age: 29, name: "Bob" },
  ];
  return (
    <div className="app-style">
      {users.map((item) => {
        return (
          <div className="component-style">
            {item.age} - {item.name}
          </div>
        );
      })}
    </div>
  );
};

export default App;

 

key 태그 붙여주기

import React from "react";
import "./App.css";

const App = () => {
  const users = [
    { id: 1, age: 30, name: "Richard" },
    { id: 2, age: 24, name: "James" },
    { id: 3, age: 21, name: "Amy" },
    { id: 4, age: 29, name: "Bob" },
  ];
  return (
    <div className="app-style">
      {users.map((item) => {
        return (
          <div key={item.id} className="component-style">
            {item.age} - {item.name}
          </div>
        );
      })}
    </div>
  );
};

export default App;