렌더링 최적화, 버그 방지

const handleTagChange = e => {
const isEnter = e.key === "Enter";
const isNotEmpty = e.target.value.trim() !== "";
if (isEnter && isNotEmpty) {
const newTag = e.target.value.trim();
// 중복 검사를 실시하여 tag 배열에는 중복 없는 문자열이 누적 된다.
if (!tags.includes(newTag)) {
setTags([...tags, newTag]);
}
e.target.value = "";
}
};
return (
<>
<div>
<p className={addItemStyles.titleForms}>태그</p>
<input
maxLength={30}
placeholder={PLACEHOLDER.tags}
onKeyUp={handleTagChange}
/>
</div>
<div className={styles.containerTags}>
{tags.map(tag => (
// tag는 중복이 없는 문자열이기 때문에 바로 key에 넣어도 된다.
<div className={styles.tag} key={tag}>
<span>{tag}</span>
<button
className={styles.btnClose}
type="button"
onClick={() => {
handleTagDeleteClick(tag);
}}
/>
</div>
))}
</div>
</>
);
예시 코드는 태그를 추가하는 기능 중 일부이다.
input의 handleTagChange함수가 실행되며 입력된 문자열을 tags 배열에 추가한다.
tags.map으로 여러 tag를 렌더링하는데 key값으로 tag의 문자열을 바로 넣는다.
중복이 없는 값이기 때문에 key로 사용할 수 있다.
key={${tag}-${i}}key={타임스탬프 또는 랜덤숫자 생성하는 함수}