const names = ['A', 'B', 'C'];
const nameList = names.map(item => <li>{item}</li>)
네, 인라인 스타일에서 style 속성의 값은 따옴표(")로 감싸줘야 합니다. 따라서 오류가 있는 문법입니다. 올바른 문법은 다음과 같습니다.
여기서 map함수로 생성한 컴포넌트를 렌더링 한다면
<ul>
<li>A</li>
<li>B</li>
<li>C</li>
</ul>
const names = ['A', 'B', 'C', 'D'];
그러나 외부요소로 인해 names의 배열이 추가되었을때
<ul>
<li>A</li>
<li>B</li>
<li>C</li>
<li>D</li>
</ul>
react는 names의 모든 부분을 다시 렌더링합니다.
이런 비효율적인 업데이트 과정을 없애고자 key가 필요합니다.
const nameList = names.map(item => <li key={item}>{item}</li>);
이런식으로 key를 설정해 준다면
<ul>
<li key="A">A</li>
<li key="B">B</li>
<li key="C">C</li>
<li key="D">D</li> <!-- 새로 추가된 항목만 업데이트됨 -->
</ul>
react에서 key를 지표삼아 새로 추가된 요소만 식별하여 업데이트 할 수 있게 됩니다.
IterationSample.js
// IterationSample.js
import React from 'react';
const IterationSample = () => {
// li에 들어가 있던 내용을 배열로 생성
const names = ['눈사람', '얼음', '눈', '바람'];
// map함수 사용
const nameList = names.map(item => <li>{item}</li>)
return (
<ul>
{nameList}
</ul>
);
};
export default IterationSample;
먼저 5-2에서 지금까지의 과정을 브라우저에서 실행하셨다면
콘솔에 확인했을때 오류창을 볼 수 있습니다.
이 경고는 리액트에서 각 배열이 고유한 key를 가져야한다고 말합니다.
key
란 react에서 컴포넌트 배열을 렌더링 했을 때,
어떤 원소에 변동이 있었는지 알아내려고 사용합니다.
⇒ 상단에 key를 사용하는 이유 참조
컴포넌트를 다음과 같이 수정해봅시다.
//IterationSample.js
import React from 'react';
const IterationSample = () => {
const names = ['눈사람', '얼음', '눈', '바람'];
// map함수 사용
const nameList = names.map((item,index) => <li key={index}>{item}</li>)
return (
<ul>
{nameList}
</ul>
);
};
export default IterationSample;
이렇게 하면 더 이상 개발자 도구에서 경고메세지를 표시하지 않습니다.
이 경우에 중요한 점은, 고유한 값이 없을때만 index값을 key값으로 사용해야 합니다.
index를 key로 사용하면 배열이 변경될 때 효율적으로 리렌더링 하지 못합니다.
따라서 배열의 고유한 값을 key로 설정하는 것을 권장합니다.