가끔 state만으로 해결할 수 없는 기능 이 있다.
이때는 어쩔 수 없이 DOM에 직접적으로 접근해야 하는데 이를 위해 바로 ref 를 사용한다
ref를 사용하는 방법은 두가지이다.
<예시>
<input ref={(ref) => {this.input=ref}} />
이렇게 하면 앞으로 this.input은 input 요소의 DOM을 가리킨다. ref의 이름은 원하는 것으로 자유롭게 지정 가능. DOM 타입과 관계 없이 this.superman = ref 처럼 마음대로 지정한다.
ref를 만드는 또 다른 방법은 리액트에 내장되어 있는 createRef라는 함수를 사용.(v16.3부터)
class RefSample extends Component {
input = React.createRef();
handleFocus = () => {
this.input.current.focus();
}
render() {
return {
<div>
<input ref={this.input} />
</div>
}
}
}
주로 컴포넌트 내부에 있는 DOM을 컴포넌트 외부에서 사용할때 쓴다.
*주의 : 서로 다른 컴포넌트 끼리 ref를 사용하지 않는다. 컴포넌트에 ref를 달고 그 ref를 다른 컴퐅넌트로 전달하고... 구조가 꼬여 유지보수 힘들다. 컴포넌트 끼리 데이터를 주고 받을 떄는 언제나 데이터를 부모 <-> 자식 흐름으로 교류 해야한다.