프론트엔드 공부/React

Ref란?

무우너대갈 2022. 2. 10. 02:26
반응형

Ref

 : render 메서드에서 생성된 DOM 노드나 React 엘리먼트에 접근하는 방법 제공

 

 - 일반적인 react에서는 부모 컴포넌트가 자식과 상호작용할 수 있는 수단은 props뿐!

 - 직접적으로 자식을 수정할 경우(react 컴포넌트의 인스턴스* || DOM 엘리먼트)

 


Ref를 사용해야 할 때

  •  포커스, 텍스트 선택영역, 미디어의 재생관리
  •  애니메이션을 직접 실행 시킬 때
  •  서드 파티 DOM 라이브러리를 React와 같이 사용할 때

+ 선언적으로 해결되는 문제에서는 ref 사용 지양

 

Ref 생성

 - React.createRef()를 통해 생성

 - ref 어트리뷰트를 통해 엘리먼트에 부착

 

   + 최신 버전이 아닌 경우 콜백 ref 사용

 

Ref 값 유형

 1) HTML 엘리먼트에 사용된 경우

   : 자신을 전달받은 DOM 엘리먼트를 프로퍼티의 값으로 받음

       1) 마운트** 될 경우

           : DOM 엘리먼트 대입

       2) 마운트 해제될 경우

           : 프로퍼티를 null로 돌려놓음

       - ref 수정 작업은 componentDidMount || componentDidUpdate 생명주기 메서드 호출 전에 이루어짐

 

 2) 커스텀 클래스 컴포넌트에 사용된 경우

   : 마운트된 컴포넌트의 인스턴스를 프로퍼티의 값으로 받음

 

+ 함수 컴포넌트에서는 ref 어트리뷰트 사용 불가

  - 인스턴스가 존재하지 않기 때문

  - 예외 : DOM 엘리먼트나 클래스 컴포넌트의 인스턴스에 접근하기 위해 사용 가능

 


콜백 ref

 - 사용시 ref 어트리뷰트에 함수 전달

 - 컴포넌트의 인스턴스

     1) 마운트 될 경우

         : ref 콜백을 DOM 엘리먼트와 함께 호출

     2) 마운트 해제될 경우

         : ref 콜백을 null과 함께 호출

 - componentDidMount || componentDidUpdate가 호출되기 전에 호출됨

 - 다른 컴포넌트에 전달 가능

 

콜백 ref 주의사항

 - ref 콜백이 인라인 함수로 선언된 경우 업데이트 과정 중

      1) 처음 : null

      2) 그 다음 : DOM 엘리먼트

           -> 두번 호출

 - 매 렌더링마다 ref 콜백의 새 인스턴스가 생성됨

 

 -> ref 콜백을 클래스에 바인딩된 메서드로 선언하며 해결 가능


* 인스턴스

  : 실행 중인 임의의 프로세스, 클래스의 현재 생성된 오브젝트

 

** 마운트

  : 어떠한 것을 Available한 상태로 준비하는 것

 - DOM이 생성되고 웹 브라우저 상에 나타나는 것

반응형

'프론트엔드 공부 > React' 카테고리의 다른 글

React Slick으로 Carousel slide 구현하기  (0) 2022.09.20
react-reset이란?  (0) 2022.09.19
React에서 환경변수 사용하기  (0) 2022.09.02
Jotai VS Zustand  (0) 2022.07.28
Zustand란?  (0) 2022.07.28