ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 리액트에서의 메서드 (map, concat, filter)
    개발공부/React 2023. 10. 20. 11:49

    리액트를 기초부터 다시 공부해보려고 한다.

    우선 리액트에서 자주 사용하는 JS 메서드부터 시작해보자! :)

     

    Map

    • 배열을 순회하면서 각 요소에 대해 주어진 함수를 호출, 반환 값으로 새로운 배열을 생성
    • 원본 배열을 변경하지 않고 새로운 배열을 반환 -> 배열을 변환하거나 재구성할 때 유용~!

    이제 위에 내용은 Map의 기본 내용이고, 리액트에서 map 메서드는 반복되는 컴포넌트를 렌더링 할 수 있게 해준다.

    이 때, key 값을 넣어줘야지 경고 메시지가 뜨지 않는다.

    const names = ["눈사람", "얼음"];
    const nameList = names.map((name, index)=> <li key={index}>{name}</li>);

    key를 설정해줘야 하는 이유

    • key는 컴포넌트 배열을 렌더링 했을 때 어떤 원소에 변동이 있었는지 알아내기 위해 사용
    • 값이 없으면 Virtual DOM은 배열을 순차적으로 비교하면서 변화를 감지
    • 있다면 이 값을 활용해 어떤 변화가 있는지 빠르게 알아낼 수 있음
    • 그래서 key는 index 값 말고 고유한 값 예: id, uuid 등등)으로 설정하는게 좋음

     

    Concat

    • 주어진 배열 또는 값들을 기존 배열에 연결하여 새로운 배열 생성
    • 원본 배열은 변경되지 않음
    const names = ["눈사람", "얼음"];
    const nameList = names.map((name, index)=> <li key={index}>{name}</li>);
    
    const newNameList = nameList.concat("빙하");

    concat을 사용하는 이유

    • 불변성을 유지해주기 때문
      • 리액트는 상태를 업데이트할 때 기존 상태를 그대로 두면서 새로운 값을 설정해야 함. 그래야지 나중에 리액트 컴포넌트의 성능을 최적화할 수 있음
    • push는 기존 배열 자체를 변경해주는 반면, concat은 새로운 배열을 만들어줌

     

    Filter

    • 배열에서 주어진 조건을 만족하는 요소들로 이루어진 새로운 배열 생성
    • 원본 배열을 변경하지 않음
    const names = ["눈사람", "얼음"];
    const nameList = names.map((name, index)=> <li key={index}>{name}</li>);
    
    const newNameList = nameList.concat("빙하");
    // ["눈사람", "얼음", "빙하"];
    
    const filterList = newNameList.filter(name => name !== "얼음");
    // ["눈사람", "빙하"];

     

    위에 세 가지 메서드는 리액트 자체 성능에 큰 영향을 끼칠 수 있다.

    • 데이터 양과 복잡성
      • 데이터 양이 많거나 복잡한 경우 map과 filter는 렌더링 지연을 발생 시킬 수 있음 -> 메모이제이션 고려
    • 렌더링 주기
      • 컴포넌트가 렌더링 될 때마다 map과 filter 메서드를 호출하면 성능 문제 발생할 수 있음 -> 훅 사용하여 최적화

     

    그 외에도 많은 영향을 끼칠 수 있기 때문에 단독으로 사용하는 것 보다 hook을 적절하게 사용하는 것이 중요하다.

    728x90

    '개발공부 > React' 카테고리의 다른 글

    DOM에 직접 접근하기 (useRef)  (0) 2023.10.26
    리액트 프로젝트 구조  (0) 2023.10.25
    동기와비동기_2 (Promise)  (0) 2023.10.18
    동기와 비동기_1  (0) 2023.10.17
    렌더링 최적화_1 (React.memo)  (0) 2023.10.16
Designed by Tistory.