map
* arr.map( callbackFunction(현재배열내의값, 현재배열내값의인덱스, 현재배열), callback함수내부에서 사용할 this레퍼런스 )
const number = [ 1, 2, 3, 4, 5 ];
const result = number.map( (num) => { num * num } );
key
- 렌더링시, 컴포넌트 배열에 어떤 변화가 일어났는지 더욱 빠르게 알아내기 위해 사용한다.
- map함수 인자로 전달되는 함수 내부에서 컴포넌트props를 설정하는 것과 같이 작성한다. 단,
key값은 언제나 유일한 값이어야만 한다.
예를들어, 게시판의 게시물을 렌더링하는 예시가 있다면, "게시물번호"를 key값으로 설정할 수 있다.
- "눈사람, 얼음, 눈, 바람" 배열을 state를 활용하여 고유값을 만들고, 렌더링 하는 방식을 알아보자.
import React from 'react';
const IterationSample = () => {
const [names, setNames] = useState ([
{ id: 1, text: "눈사람" },
{ id: 2, text: "얼음" },
{ id: 3, text: "눈" },
{ id: 4, text: "바람" },
]);
const [inputText, setInputText] = useState('');
const [nextId, setNextId] = useState(5);
const inputChangeHandler = (e) => {
setInputText(e.target.value);
}
const buttonClickEvent = () => {
const nextNames = names.concat({
id: nextId,
text: inputText,
});
setNextId(nextId + 1);
setNames(nextNames);
setInputText('');
};
const nameList = names.map( (name) => {
<li key={name.id}> {name.text} </li>
} )
return (
<>
<input
value={inputText}
onChange={inputChageHandler}
/>
<button
onClick={buttonClickEvent}
>
추가
</button>
<ul> {nameList} </ul>
</>
)
}
export default IterationSample;