기은P
시간이 멈추는 장소
기은P
  • Programming (272)
    • 개발노트 (1)
    • FrontEnd (56)
      • ES&JS 문법 (14)
      • HTML&CSS (4)
      • React 기본 (18)
      • React 심화 (12)
      • React 이슈 (2)
      • Project 연습 (1)
      • Next.js (5)
    • Backend&Devops (33)
      • AWS (2)
      • Docker (9)
      • Jenkins (6)
      • Nginx (6)
      • Node.js (1)
      • ElasticSearch (5)
      • 프레임워크&아키텍처 (2)
      • 암호화 (0)
      • 기타 (2)
    • 알고리즘 (3)
    • C# (8)
      • WPF (8)
    • Java (51)
      • 순수 Java (18)
      • RDF&Jena (12)
      • RCP&GEF (9)
      • JMX (5)
      • JMapper (3)
      • 오류해결 (4)
    • Database (21)
      • RDBMS (9)
      • NoSQL (2)
      • TSDB (1)
      • GraphQL (1)
      • Hibernate (3)
      • 데이터베이스 이론 (4)
      • Redis (1)
    • 프로토콜 (11)
      • Netty (4)
      • gRPC (5)
      • 프로토콜 개념 (2)
    • Server (4)
      • Linux (4)
    • 2020 정보처리기사 필기 (43)
      • 목차 (1)
      • 기출문제 (1)
      • 1과목 - 소프트웨어 설계 (6)
      • 2과목 - 소프트웨어 개발 (7)
      • 3과목 - 데이터베이스 구축 (8)
      • 4과목 - 프로그래밍 언어 활용 (7)
      • 5과목 - 정보시스템 구축 관리 (10)
    • 2020 정보처리기사 실기 (31)
      • 목차 (4)
      • 기출예상문제 (19)
      • 실기요약 (8)
    • 빅데이터분석기사 필기 (4)
      • 목차 (0)
      • 필기 요약 (3)
    • 전기 공학 (1)
      • CIM (1)
    • 산업자동화시스템 (3)
      • SCADA (1)
      • OPC UA (2)
    • 디자인패턴 (1)
    • 휴지통 (0)

공지사항

  • 공지사항/포스팅 예정 항목

최근 댓글

최근 글

전체 방문자
오늘
어제

티스토리

hELLO · Designed By 정상우.
기은P

시간이 멈추는 장소

[React] React.js 강좌 10.  map, slice, concat, spread 사용법
FrontEnd/React 기본

[React] React.js 강좌 10. map, slice, concat, spread 사용법

2021. 12. 7. 14:12
반응형

React map, slice, concat, spread 사용법

 

 

1. 기본적인 map() 사용법

map()함수는 각 배열의 요소를 돌면서 인자로 전달된 함수를 사용해 처리된 새로운 결과를 새로운 배열에 담아 반환하는 함수입니다!

 

const numbers = [1, 2, 3, 4, 5];
const result = numbers.map((num) => num *2);
console.log(result);

 

numbers.map 안에 (num)이라고 되어있는 부분이 있는데, 이거는 함수 내부에서 임의로 지정한 변수이기 때문에 아무렇게나 작성하셔도 됩니다!(알기 쉬운 data나 param 등등…) 

위 코드의 결과로는 각 요소의 2배인 값이 나옵니다!

 

 

 

 

 

2. 함수형 컴포넌트에서 map() 사용하기

이제 본격적으로 map을 사용해보는데, 함수형 컴포넌트에서 map을 사용해서 DOM 태그를 출력해보려고 합니다.

 

import { render } from '@testing-library/react'
import React, { Component } from 'react'
 
export default function MapTest(){
    const menus = ['menu1','menu2','menu3','menu4']
    const menuList = menus.map((data) => (<li>{data}</li>))
   
    return(
        <ul>
            {menuList}
        </ul>
    );  
}

 

 

위와 같이 menus 라는 배열을 만들고, 배열에 map을 호출해서 menuList에 <li>태그를 초기화 하도록 합니다. 

마지막으로 return 하는 부분에서 <ul>태그 밑에 JSX menuList를 작성하면

 

 

위와 같이 menus의 값이 출력됩니다!

 

 

가능하다면 map을 사용할 때 아래와 같이 Key를 같이 사용해주는 것이 좋습니다.

 

const numbers = [1, 2, 3, 4, 5];
const listItems = numbers.map((number) =>
  <li key={number.toString()}>
    {number}
  </li>
);

  

키는 리스트의 다른 항목들 사이에서 해당 항목을 고유하게 식별할 수 있는 문자열을 사용해야 합니다.

 

리엑트에서는 컴포넌트를 렌더링 할 때, 어떤 원소가 변경되었는지 빠르게 감지하기 위해서 Key를 사용하는데, 만약 key가 설정되지 않았다면 가상 DOM을 순차적으로 비교하면서 감지하기 때문에 key가 없을 때보다 속도가 느립니다.

이 Key값은 map() 함수를 호출할 때 인자로 넘기는 Callback 함수의 인자로 넘어오는 index 값을 사용하면 됩니다.

 

import { render } from '@testing-library/react'
import React, { Component } from 'react'

export default function MapTest(){
    const menus = [{key:1, value:'menu1'},
               {key:2, value:'menu2'},
               {key:3, value:'menu3'}];
    const menuList = menus.map((index, data) => (<li key={index}>{data}</li>))

    return(
        <ul>
            {menuList}
        </ul>
    );           
}

 

 

 

3. slice, filter

배열 데이터를 삭제할 때 slice와 filter를 사용하는데, 리엑트에서 주의해야할 점은 데이터의 불변성을 유지하면서 작업을 진행해야 합니다.

이때 사용되는 것이 slice와 filter입니다.

 

slice 사용 예 

const numbers = [1,2,3,4,5];
console.log(numbers.slice(0,2));
// [1,2] 기존의 배열은 건드리지 않습니다!

numbers.slice(0,2).concat(numbers.slice(3,5))
// [1,2] 먼저 slice의 결과물인 1,2과 출력되고, concat함수로 인해 뒤에 있는 데이터가 더해집니다.
// [1,2,4,5]

[
   …numbers.slice(0,2),
   10,
   …numbers.slice(3,5)
]
// [1,2,10,4,5]

 

 

filter 사용 예

const numbers = [1,2,3,4,5]
numbers.filter(n => n>3);
// [4,5] 필터로 인해 배열 내부의 값이 걸러집니다.
 
Numbers.filter(n => n !== 3);
// [1, 2, 4, 5]

  

 

 

 

 

4. spread 연산자

 

React 배열을 다룰 때 spread 연산자를 사용해서 배열의 값들을 초기화하거나 확장시킬 수 있습니다.

이제까지 사용한 배열과 관련된 함수를 적용하면 아래와 같이 사용할 수 있습니다.

 

const singerOne = ['청하', '여자아이들', '우주소녀']
const singerTwo = ['홍대광', '악동뮤지션', '볼빨간사춘기']
const combinedOne = singerOne.concat(singerTwo);

 

여기서 중간에 어떤 가수 이름을 추가하거나, concat이라는 함수를 사용하지 않고 spread 문법을 사용하면 아래와 같이 정리할 수 있습니다.combinedOne에는 청하,여자아이들,우주소녀,홍대광,악동뮤지션,볼빨간사춘기가 출력되겠죠.

 

 const combinedTwo = [...singerOne, 'BTS', ...singerTwo];
// 청하,여자아이들,우주소녀,BTS,홍대광,악동뮤지션,볼빨간사춘기가 출력된다.

 

위와 같이 배열을 확장을 할 수도 있고,

 

const numbers = [1, 2, 3, 4, 5, 6];
const [one, two, ...rest] = numbers;
// …rest를 출력하면 3,4,5,6이 출력된다.

 

위와 같이 초기화를 할 수도 있습니다. 

 

 

추가적으로 객체도 결합해서 사용할 수 있는데,

 

const myVehicle = {
  brand: 'Ford',
  model: 'Mustang',
  color: 'red'
}
 
const updateMyVehicle = {
  type: 'car',
  year: 2021,
  color: 'yellow'
}
 
const myUpdatedVehicle = {...myVehicle, ...updateMyVehicle}
console.log(myUpdatedVehicle)

 

 

출력하면 위와 같은 결과가 나옵니다.

 

 

 

반응형
저작자표시 변경금지 (새창열림)

'FrontEnd > React 기본' 카테고리의 다른 글

[React] React.js 강좌 12. useRef  (0) 2021.12.10
[React] React.js 강좌 11. Context  (0) 2021.12.10
[React] React.js 강좌 9. Input 상태 관리하기  (0) 2021.11.26
[React] React.js 강좌 8. 함수형 컴포넌트 props 정리  (0) 2021.11.25
[React] React.js 강좌 7. 조건부 연산자  (0) 2021.11.25
    'FrontEnd/React 기본' 카테고리의 다른 글
    • [React] React.js 강좌 12. useRef
    • [React] React.js 강좌 11. Context
    • [React] React.js 강좌 9. Input 상태 관리하기
    • [React] React.js 강좌 8. 함수형 컴포넌트 props 정리
    기은P
    기은P
    기은P의 블로그 일상과 개발 관련 포스팅 #React #Typescript #Next #Nest https://github.com/kimdongjang

    티스토리툴바