FE코크
탄산 가득 시원한 개발일지
FE코크
전체 방문자
오늘
어제
  • 분류 전체보기 (43)
    • 우아한테크코스 (22)
      • 우아한테크코스4기 (4)
      • 우아한테크코스3 (10)
      • 회고록 (8)
    • Web (0)
      • HTTP 웹 기본지식 (0)
    • JavaScript (2)
    • React.js (12)
    • 알고리즘 풀이 (2)
    • HTML, CSS (4)
    • 기타 (1)
      • 일상 (0)
      • 후기 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 레벨1회고
  • CSS
  • 자바스크립트
  • 코어자바스크립트
  • JavaScript
  • 주간회고
  • 회고록
  • React.DOM
  • 프리코스
  • 우아한테크코스 3기
  • 4기
  • 백준
  • 리액트
  • 회고
  • 프론트엔드
  • state
  • prop drilling
  • 개발자
  • jsx
  • 우아한테크코스
  • 알고리즘
  • createRoot
  • react.js
  • 재택하고싶은데
  • 노마드코더
  • 우테코
  • 우테코4기
  • Props
  • react
  • Reactjs

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
FE코크

탄산 가득 시원한 개발일지

[React] Ref(React.createRef, ref attribute, useRef)
React.js

[React] Ref(React.createRef, ref attribute, useRef)

2022. 6. 18. 10:56

결, 꼬재랑 함께하는 레벨2 방학 스터디

 

Ref

  • Ref는 render 메서드에서 생성된 DOM 노드나 React Element에 접근 하는 방법을 제공한다.
  • Ref는 React.createRef()를 사용해 생성하고, 만든 Ref는 참조하려고 하는 노드의 ref attribute에 연결해 준다.
  • Function Component는 인스턴스가 없기 때문에 Function Component에 ref attribute를 사용할 수 없다.
  • 하지만 DOM element나 Class Component의 인스턴스에 접근하기 위해 ref attribute를 Function Component에서 사용하는 것은 된다.
  • Ref는 컴포넌트 Life Cycle 내에서 유지되는 변경 가능한 변수이다.
  • Ref는 State와 달리 값이 변경 되었을때 리렌더링이 되지 않는다.
  • 부모 컴포넌트에서 자식 컴포넌트로 ref를 전달 할때는 forwardRef를 사용해야 한다.

 

공식문서

 

부모 컴포넌트에서 자식 컴포넌트에 ref 전달

 


React.createRef(), ref attribute, useRef()가 어떤 값을 가지는지에 대해 간단하게 알아보겠습니다.

 

React.createRef()

 

 

 

ref attribute

 

 

ref는 current 프로퍼티 하나를 가진 객체이다.
DOM 노드에 연결 하면 해당 노드 객체가 current 값에 할당된다.

 

 

 

useRef(initialValue)

 


Ref 를 사용해야 하는 케이스는 무엇이 있을까요?

공식문서

공식문서에서는 다음과 같이 설명을 하고 있는데 쉽게 생각을 해보면 ref는 컴포넌트 Life Cycle 내에서 유지되는 변경 가능한 변수이며 값이 변경 되었을때 리렌더링 되지 않는다.

즉 ref를 사용하면 전체 컴포넌트를 리렌더링 시키지 않고 DOM에 접근하여 원하는 effect를 주는게 가능하다.

 

 

Ref 를 남용하면 안되는 이유는 무엇일까요?

React는 state를 가지는 컴포넌트들 간의 관계로 구성되어 있고 state를 props로 전달하여 컴포넌들 간의 소통이 가능하다. 하지만 ref를 사용하면 다른 컴포넌트들에 접근할수 있어 다음과 같은 상황을 고려해야 한다.

  • ref는 데이터의 동기화를 보장하지 않는다.
  • ref의 값을 변경하면 컴포넌들가 리렌더링 되지 않기 때문에 원하는 모습으로 구현이 되지 않는다.
  • ref의 값을 변경하는 것은 side effect이므로 컴포넌트가 마운트 되고 난 후, useEffect 내에서 값을 변경 하거나 이벤트가 발생하는 event handler 안에서 값을 변경 해야 한다.

 

 

 


Refs and the DOM - React

 

Refs and the DOM – React

A JavaScript library for building user interfaces

reactjs.org

[React] 엘리먼트, 컴포넌트, 인스턴스 개념

 

[React] 엘리먼트, 컴포넌트, 인스턴스 개념

1. 엘리먼트 (Element) 실제로 화면에 렌더링 할 DOM 노드들의 정보를 React에게 알려주기 위한 수단이다. DOM 노드 혹은 컴포넌트를 표현하는 JavaScript의 일반 불변 객체(Plain Immutable Object)에 해당한다..

it-eldorado.tistory.com

 

'React.js' 카테고리의 다른 글

[React] Props(불변 객체, Prop Drilling)  (0) 2022.06.22
[React] State의 모든 것(feat.batch)  (2) 2022.06.15
[React] Key  (0) 2022.06.15
[React] VirtualDOM  (0) 2022.06.15
[React] JSX  (0) 2022.06.15
    'React.js' 카테고리의 다른 글
    • [React] Props(불변 객체, Prop Drilling)
    • [React] State의 모든 것(feat.batch)
    • [React] Key
    • [React] VirtualDOM
    FE코크
    FE코크
    공부한 내용을 적는 블로그

    티스토리툴바