{userList.map((user, index) => ( ))} ); }"> {userList.map((user, index) => ( ))} ); }"> {userList.map((user, index) => ( ))} ); }">
import React, { useState, useRef } from 'react';
export default function TestPage() {
const inputRef = useRef(null)
const [userList, setUserList] = useState([
{ id: 1, name: "Mike" },
{ id: 2, name: "Tom" },
{ id: 3, name: "Jane" },
{ id: 4, name: "Paul" },
]);
function pushNewUser() {
setUserList([
{
id: userList.length + 1,
name: inputRef.current.value,
},
...userList,
])
}
return (
<div>
{userList.map((user, index) => (
<input
key = {user.id}
type = 'text'
placeholder = {user.name}
style = {{ display : "block" }}
/>
))}
<input type = 'text' ref = {inputRef} />
<button onClick = {}>등록</button>
</div>
);
}
input으로 받은 새로운 값을 객체의 마지막 값으로 추가할 때는 key를 그냥 index로 주어도 상관이 없지만 새로운 input 값을 맨 앞에 추가할때와 같은 경우에는 원하는 값을 얻을 수 없기 때문에 그냥 key값을 index가 아닌 user.id로 지정해 주어야 한다.
index로 주면 새로운 input이 추가될때 실제로는 맨 앞에 input이 추가 되는 것이 아니라 맨 뒤에 input이 추가 되고 모든 값이 하나씩 뒤로 밀리는 것과 같다.
user.id와 같이 unique한 값을 주어야만 맨 앞에 input이 추가 되면서 그 값이 추가 되어 훨씬 더 효과적인 코드가 된다.