HTML과 JS를 사용할때, DOM에 접근하거나 선택할 일이 있으면, getElementById
나 querySelector
등의 DOM selector 함수를 사용함.
React를 사용하는 경우에서도 특정 DOM에 접근할 일이 있다.
이럴때, React에서는 ref
라는 것을 사용하고,
함수형 컴포넌트에서는 useRef
라는 훅 함수를 사용한다.
클래스형 컴포넌트에서는 React.createRef()
라는 함수를 사용.
여기선 함수형 컴포넌트일때 사용하는 useRef
함수만 알아봄!
우리가 이전에 만든 InputSample 컴포넌트에서는 초기화 버튼을 누르고 나면, 포커스가 계속 '초기화' 버튼에 남아있음.
이 부분을 '초기화' 버튼을 누르고 나서 '이름' input 태그로 포커스가 이동하게 변경해보자.
이렇게 바꾸기 위해서는 React 자체적인 기술로는 뭔가 할 수 있는게 없어, 직접 DOM에 접근을 해야 한다.
DOM에 직접 접근하기 위해서는
먼저 useRef
함수를 불러옴.
import React, { useState, useRef } from 'react';
//새로 'useRef' 함수 불러옴
그리고 코드 상단에
const nameInput = useRef();
라고 nameInput 객체를 선언.
그리고 만들어진 nameInput 객체를 우리가 선택해주고 싶은 DOM에 설정해준다.
<input
name="name"
placeholder="이름"
onChange={onChange}
value={name}
ref={nameInput} //이렇게 설정!
/>
여기까지 하고 나면 우리가 원하는 DOM에 직접 접근할 수 있는데,
const onReset = () => {
setInputs({
name: '',
nickname: '',
});
nameInput.current.focus(); //이렇게 접근할 수 있다.
};
위와 같이 쓸 수 있다.
nameInput.current.focus();
이 문장을 해석해보면,
nameInput.current
까지가 해당 DOM을 가리키게 되고,
그 다음 DOM API 중 하나인 focus()
함수를 사용하여 우리가 원하는 기능을 구현할 수 있다.
+ useRef
함수의 기능으로 이렇게 DOM에 접근하는 것 말고도, 렌더링과 관련이 없는 변수를 관리할 수 있는데, 이 기능은 다음에 알아봄! 😀