SlideShare a Scribd company logo
1 of 7
Download to read offline
컴포넌트반복
임광규
2020.ReactJS 1
map()함수를사용한반복처리
map()메서드는배열내의모든요소각각에대하여주어진함수를호출한결과를모아새로운
배열을반환합니다.
const array1 = [1, 4, 9, 16];
// pass a function to map
const map1 = array1.map(x => x * 2);
console.log(map1);
// expected output: Array [2, 8, 18, 32]
2020.ReactJS 2
데이터배열을컴포넌트배열로변환하기
import React from 'react';
export default () => {
const captainPlanet = ['땅', '불', '바람', '물', '마음'] ;
return <div>
<ul>
{captainPlanet.map(s => <li>{s}</li>)}
</ul>
</div>
}
2020.ReactJS 3
key
크롬개발자도구의콘솔을열어보면위와같은오류가발생합니다.
리액트에서 key 는컴포넌트배열을랜더링할때어떤원소에변동이있었는지알아내려고사용합니
다.
특히유동적인데이터를다룰때는원소를새로생성하거나,제거,변경할경우
key 가없으면virtualDOM을비교하는과정에서리스트를순차적으로비교하면서변화를감지하
지만
key 가있다면이값을사용해서어떤변화가일어나는지더욱빠르게알아낼수있습니다.
2020.ReactJS 4
key설정
키값은중복되지않는값이어야합니다.
import React from 'react';
export default () => {
const captainPlanet = ['땅', '불', '바람', '물', '마음'] ;
return <div>
<ul>
{captainPlanet.map((s, i) => <li key={i}>{s}</li>)}
</ul>
</div>
}
index를key로사용하면배열이변경될때효율적으로리랜더링하지못합니다.
데이터에포함된키값을key로이용하는게가장좋습니다.
2020.ReactJS 5
반복되는컴포넌트의수정/삭제처리시유의사항
배열을수정할때직접접근하여수정하는것이아니라filter(),concat()등의배열내장함수를
사용하여새로운배열을만든후이를새로운상태로설정해야합니다.
import React, {useState} from 'react';
export default () => {
const [captainPlanet, setCaptainPlanet] = useState([{id: 1, text: "땅"}, {id: 2, text: '불'}, {id: 3, text: '바람'}]);
const [nextId, setNextId] = useState(4);
const [inputText, setInputText] = useState("");
return (<div>
<input type="text" value={inputText} onChange={e=>setInputText(e.target.value)} />
<button onClick={e=>{
const nextCp =captainPlanet.concat({id: nextId, text: inputText});
setNextId(nextId+1);
setCaptainPlanet(nextCp);
setInputText('');
}}>등록</button>
<ul>
{captainPlanet.map((s) => <li key={s.id} onClick={e=>{
setCaptainPlanet(captainPlanet.filter(c => c.id !== s.id));
}}>{s.text}</li>)}
</ul>
</div>);
}
2020.ReactJS 6
정리
컴포넌트배열을랜더링할때는key값설정에항상주의해야합니다.또key값은언제나유일해야
합니다.
만약key값이중복된다면랜더링과정에서오류가발생합니다.
상태안에서배열을변형할때는배열에직접접근하여수정하는것이아니라filter(),concat()등의
배열내장함수를사용하여새로운배열을만든후이를새로운상태로설정해야합니다.
2020.ReactJS 7

More Related Content

More from Daniel Lim

피드백 시스템
피드백 시스템피드백 시스템
피드백 시스템Daniel Lim
 
12.context api
12.context api12.context api
12.context apiDaniel Lim
 
11.react router dom
11.react router dom11.react router dom
11.react router domDaniel Lim
 
9.component style
9.component style9.component style
9.component styleDaniel Lim
 
7.component life cycle
7.component life cycle7.component life cycle
7.component life cycleDaniel Lim
 
4.event handling
4.event handling4.event handling
4.event handlingDaniel Lim
 
3.component 101
3.component 1013.component 101
3.component 101Daniel Lim
 
Swagger? OAS? with NodeJS
Swagger? OAS? with NodeJSSwagger? OAS? with NodeJS
Swagger? OAS? with NodeJSDaniel Lim
 
Kubernetes object에 대하여
Kubernetes object에 대하여Kubernetes object에 대하여
Kubernetes object에 대하여Daniel Lim
 
라즈베리파이 배우기 GPIO 편
라즈베리파이 배우기 GPIO 편라즈베리파이 배우기 GPIO 편
라즈베리파이 배우기 GPIO 편Daniel Lim
 
ReactJS & Material-ui Hello world
ReactJS & Material-ui Hello worldReactJS & Material-ui Hello world
ReactJS & Material-ui Hello worldDaniel Lim
 
JAVA 개발자가 시작하는 NodeJS
JAVA 개발자가 시작하는 NodeJSJAVA 개발자가 시작하는 NodeJS
JAVA 개발자가 시작하는 NodeJSDaniel Lim
 

More from Daniel Lim (20)

For You
For YouFor You
For You
 
Nest js 101
Nest js 101Nest js 101
Nest js 101
 
피드백 시스템
피드백 시스템피드백 시스템
피드백 시스템
 
13.code split
13.code split13.code split
13.code split
 
12.context api
12.context api12.context api
12.context api
 
11.react router dom
11.react router dom11.react router dom
11.react router dom
 
9.component style
9.component style9.component style
9.component style
 
7.component life cycle
7.component life cycle7.component life cycle
7.component life cycle
 
8.hooks
8.hooks8.hooks
8.hooks
 
4.event handling
4.event handling4.event handling
4.event handling
 
5.ref 101
5.ref 1015.ref 101
5.ref 101
 
3.component 101
3.component 1013.component 101
3.component 101
 
2.jsx 101
2.jsx 1012.jsx 101
2.jsx 101
 
1.react 101
1.react 1011.react 101
1.react 101
 
Swagger? OAS? with NodeJS
Swagger? OAS? with NodeJSSwagger? OAS? with NodeJS
Swagger? OAS? with NodeJS
 
CuKu V1.3
CuKu V1.3CuKu V1.3
CuKu V1.3
 
Kubernetes object에 대하여
Kubernetes object에 대하여Kubernetes object에 대하여
Kubernetes object에 대하여
 
라즈베리파이 배우기 GPIO 편
라즈베리파이 배우기 GPIO 편라즈베리파이 배우기 GPIO 편
라즈베리파이 배우기 GPIO 편
 
ReactJS & Material-ui Hello world
ReactJS & Material-ui Hello worldReactJS & Material-ui Hello world
ReactJS & Material-ui Hello world
 
JAVA 개발자가 시작하는 NodeJS
JAVA 개발자가 시작하는 NodeJSJAVA 개발자가 시작하는 NodeJS
JAVA 개발자가 시작하는 NodeJS
 

6.component repeat