ref는 변경이 가능한 변수
이며, 값이 변할 때 렌더링이 되지 않습니다
ref는 주로 dom
에 접근해서, 컴포넌트 전체 랜더링과 관련없는 작업을 할 때 유용합니다
부모컴포넌트에서 자식컴포넌트로 ref를 내려줄때
는 forwardRef
를 사용합니다.
ref는 사실 일반 객체입니다. ref를 찍어보면 다음과 같이 나옵니다.
useRef는 리렌더링 하지 않습니다. 컴포넌트의 속성만 조회&수정합니다.
]
React
에서 State
는 많이 사용하고 , 중요한 개념입니다. useRef
를 사용했을 때 이득이 되는 점은, 무분별한 컴포넌트 리랜더링을 방지한다
입니다.
Ref를 출력해보면 current
프로퍼티를 갖는 객체가 나옵니다. 리액트에서 이 객체를 통해 DOM의 직접적인 접근
을 가능하게 합니다.
이제 Ref를 사용해봅시다.
위와 같은 코드가 있다고 해봅시다. 이 코드는 input
이 바뀔떄마다, 리랜더링
이 발생하고, 글자를 입력할떄마다, 상당히 많이 랜더링이 발생합니다.
이제 ref
로 과도한 리랜더링
을 방지해보겠습니다.
같은 문자열을 입력해도 리랜더링이 굉장히 적어진 것을 볼 수 있었습니다.
리액트에서도 id
,class
등의 DOM API를 사용 가능합니다. 하지만 사용이 권장되지
는 않습니다.
이떄, id
나 class
로 특정해서 원하는 DOM요소
를 갖고 오기 쉽지 않습니다. 예를
들어, 같은 컴포넌트를 여러번 사용한다고 생각해 봅시다. HTML에서 id
는 유일해야
하는데, 이 경우에는 유일한 id
가 여러번 반복해서 생기므로, 바람직하지 않는 접근
입니다.
위에 작성해놓은, fowardRef
에 대해서 알아보겠습니다.
다른 컴포넌트에 ref Props
를 넘겨서, 그 컴포넌트에 있는 HTML요소에 접근하게 합니다.
부모컴포넌트
로부터 하위컴포넌트
로 ref
를 전달가능하고, 이렇게 전달받은 ref
를
HTML요소의 속성
으로 넘겨주어서, 함수 컴포넌트에서 ref을 통한 제어
가 가능합니다.
코드를 통해 알아보겠습니다.
자식 컴포넌트(CustomInput)
을 forwardRef
으로 감싼다. 두번째 인자인 ref
를 참조하려는 HTML요소
에 할당한다.
부모 컴포넌트(CustomField)
에서 참조를 위한 useRef
를 만든다.
참조를 위한 ref값(요기에서는 inputRef)
를 자식 컴포넌트의 props
로 할당해준다.