https://curryyou.tistory.com/488
블로그내용)
# TypeScript에서 useRef 사용 방법
TypeScript에서 useRef 사용시, 아래와 같이 제네릭과 초기값을 설정해야 한다.
1. 값 저장 용도
- 제네릭 : 값의 타입을 넣어준다.
- 초기값 : 반드시 타입에 맞는 초기값을 할당해준다.
// 값 저장 용도(number)
const count = useRef<number>(0);
const text = useRef<string>("")
2. DOM 취득 용도
- 제네릭 : 참조하는 HTML 엘리먼트를 넣어준다.
- 초기값: null을 넣어준다.
// DOM button 참조: 제네릭으로 html엘리먼트(button) 설정. 초기값은 null로 설정
const buttonRef = useRef<HTMLButtonElement>(null);
// DOM input 참조 : 제네릭으로 html엘리먼트(input) 설정
const inputRef = useRef<HTMLInputElement>(null);
* useRef로 취득하는 DOM은 최초 mount되기 전엔 null이다.(아래 글 참고)
[React] useRef로 DOM 취득시, null | undefined 되는 이유와 해결방법
# useRef - ref객체 타입
useRef로 생성한 ref객체의 타입은 아래의 2가지로 정의된다.
1. 값 저장 용도
- ref 객체는 React.MutabeRefObject<제네릭> 타입이 되며, ref객체.current 의 값 수정이 가능하다.
React.MutableRefObject<number>
2. DOM 취득 용도
- ref 객체는 React.RefObject<제네릭> 타입이 되며, ref.current(참조하는 DOM) 값 자체는 수정이 불가하다
- 단, ref.current.속성(DOM객체.속성)은 수정 가능하다.
React.RefObject<HTMLButtonElement>
React.RefObject<HTMLInputElement>
* 참고 : const inputRef = useRef<HTMLInputElement | null>(null); 처럼 제네릭에 null을 명시한 경우,
* ref객체는 MutableRefObject<HTMLInputElement | null> 타입으로 정의된다.
useRef로 만든 ref 객체의 타입을 사용해야 할 경우,
상황에 따라 MutableRefObject와 RefObject를 사용해주면 된다.
사실 에디터에서 마우스 오버하면, 어떤 타입인지 바로 확인 가능하다.
+ if 조건문 작성 중 if안에서 .current는 null 일 수 있다는 오류가 계속 떠서
아래와 같이 변경해주었더니 오류 해결
idInput.current?.focus();
그리고 위에 방법에 따라 useRef는 다음과 같이 type설정함
const idInput = useRef<HTMLInputElement>(null);
위처럼 type설정하지 않으면 다음과 같은 에러 출력
Type 'MutableRefObject<undefined>' is not assignable to type 'Ref<HTMLInputElement> | undefined'. |
'Type Script > Type 적용' 카테고리의 다른 글
[TS] useState type (0) | 2023.03.08 |
---|---|
[TS] 객체로 이루어진 배열 type(feat.props) (1) | 2023.03.08 |
[TS] 객체 type (아직 정해지지 않은 key,value) (0) | 2023.03.08 |
[TS] change, submit e매개변수 type, onChange type (feat.Type보는 방법) (0) | 2023.03.07 |
[TS] children Type (0) | 2023.03.07 |