고유한 아이디를 만들 때 사용하는 React Hook
사용방법 : import 후 호출해서 사용
아무런 인자도 전달받지 않기 때문에 호출하면 문자열 형태의 아이디를 하나 반환함
useId로 만든 ID는 input같은 form요소에 접근성에 관련된 속성을 제공할 때 유용하게 사용됨
input 요소에 ID속성을 제공하는 경우 많이 사용됨
label과 input 요소의 연관성을 코드상으로 명시해서 코드의 접근성을 높여주기
input요소에 id를 넣어주고, label의 htmlFor 속성에 input의 id를 그대로 넣어주기
이렇게 연결시켜주면 브라우저에 있는 input box를 직접 클릭하지 않고 label을 클릭해도 input box에 focus가 자동으로 들어옴 (접근성이 좋아짐)
웹페이지를 음성으로 읽어주는 스크린 리더도 두 요소가 연결되어있다는 것을 인지하기 때문에 음성으로 레이블을 읽어줄 수 있음(접근성이 좋아짐)
import { useId } from "react";
function UseIdHook() {
const id = useId();
console.log(id);
return (
<div>
<label htmlFor="name">이름 : </label>
<input id="name" />
</div>
);
}
export default UseIdHook;
import { useId } from "react";
function UseIdHook() {
const id = useId();
console.log(id);
return (
<div>
<MyInput />
<MyInput />
</div>
);
}
function MyInput() {
return (
<div>
<label htmlFor="name">이름 : </label>
<input id="name" />
</div>
);
}
export default UseIdHook;
두 번째에 있는 label을 클릭하면 첫 번째 input에 focus가 생김
- 문제를 해결하려면? -> 각각의 input에 고유한 id를 부여해주자 -> useId를 사용하자!
React는 고유한 아이디를 만들어주는 useId라는 Hook을 제공함
useId 적용한 코드
import { useId } from "react";
function UseIdHook() {
return (
<div>
<MyInput />
<MyInput />
</div>
);
}
function MyInput() {
const id = useId();
return (
<div>
<label htmlFor={id}>이름 : </label>
<input id={id} />
</div>
);
}
export default UseIdHook;
각 input이 고유한 Id를 가지고 있음
두 번째 label을 클릭하면 두 번째 input에 focus가 들어옴
useId를 사용해서 Id를 만들면 각 컴포넌트가 고유한 아이디가 생성되어 input에 들어감
컴포넌트를 만들다보면 하나의 컴포넌트 안에 여러 개의 input을 담아야 할 때가 있음
1. id의 생김새
2. 안정성
3. 서버 사이드 렌더링을 사용하는 프로젝트에 유리
(안정성이 큰 역할을 함)