레이블 지정을 통해 구성이나 분류에 도움이 되는 키워드 집합을 만들 때 자주 사용
import { useRef, useState } from 'react';
export const Tag = () => {
const initialTags = ['CodeStates', 'kimcoding'];
const inputRef = useRef();
const [tags, setTags] = useState(initialTags);
const removeTags = (indexToRemove) => {
setTags((prev) => prev.filter((ele, idx) => idx !== indexToRemove));
};
const addTags = (event) => {
const { value } = event.target;
// 입력된 값이 없거나 이미 있는 태그면 추가하지 않기
if (!value || tags.includes(value)) return;
// 태그 추가
setTags((prev) => [...prev, value]);
// input 창 비우기
inputRef.current.value = '';
};
return (
<>
<div>
<ul id='tags'>
{tags.map((tag, index) => (
<li key={index} className='tag'>
<span className='tag-title'>{tag}</span>
<span
className='tag-close-icon'
onClick={() => removeTags(index)}
>
×
</span>
</li>
))}
</ul>
<input
className='tag-input'
ref={inputRef}
type='text'
onKeyUp={(event) => {
{
if (event.key === 'Enter') {
addTags(event);
}
}
}}
placeholder='Press enter to add tags'
/>
</div>
</>
);
};
onKeyUp 이벤트의 경우, event의 keyCode 속성은 사용하지 않는 것을 권장
keyCode 대신 key 속성 사용할 것