본문 바로가기

카테고리 없음

useRef

Ref = reference = 참조 = 다른 자료나 정보를 인용함 (필요한 정보를 얻기 위해 다른 자료를 살펴보는 것)

 

일단 이 훅에 기능이 두개 있다. (이러니까 어렵지..)

 

 

1.저장 공간으로서의 기능

2.DOM요소를 선택하는 기능

 

 

1.저장 공간으로서의 기능

useRef는 값을 저장하는 컨테이너 역할을 한다.

이 저장공간에 저장된 값은 변경되어도 컴포넌트가 다시 렌더링 되지 않는다.(X)

 

변수가 바뀌어도 , ui를 다시 그려주지 않는다. (렌더링 하지 않아)

useState를 쓰면  ui를 다시 그려주는 대신에 제랜더링이 일어난다.

 

--> 렌더링 : 컴포넌트 함수가 다시 호출되는 과정

 

그러니까 컴포넌트를 계속해서 유지하고 싶은데 , 컴포넌트 안에 값 몇개만 바꾸고 싶을 때 쓰는 거다.

컴포넌트의 라이프사이클의 영향을 주지 않고 렌더링 할 수 있다.

 

이말인 즉슨 , 상품페이지에서 상품컴포넌트 2페이지를 보여줘도 ,

상품컴포넌트가 제렌더링되지 않고 바로 2페이지로 넘어갈 수 있다.

 

 

 

2.DOM을 조작할 수 있다.

컴포넌트의 렌더링 사이클과무관하게 DOM을 조작할 수 있다.

가상 DOM이 아닌 , 진짜 DOM을 조작한다.

 

컴포넌트 렌더링과 관계없이 값을 유지해야 하는 상황에서 유용하게 쓰인다.

 

??  변수 자체에 저장해서 쓰면 되는 거 아닌가?

변수가 직접적으로 DOM트리에 영향을 미치지 않지만 , 간접적으로 영향을 미칠 수 있다.

 

 

 

 

자. 이제 사용법을 알아보겠다.

1.참조 객체 생성 (ref 생성)

const myRef = useRef(초기값);

 

기본적으로 null로 초기화 된다.

 

2.DOM 요소에 참조 연결(input  , div ~~)

<input ref={myRef} />

 

3.참조된 DOM 요소에 접근

myRef.current

 

current를 사용해 실제 DOM 요소에 접근 할 수 있다.

current , current.focus만 있나보다. 나중에 또 발견하면 추가하겠다.

 

 

 

import React, { useRef } from 'react';

const Example = () => {
  // useRef로 참조 객체를 생성합니다. 초기값은 null입니다.
  const myRef = useRef(null);

  // 버튼 클릭 시 참조된 요소에 접근합니다.
  const handleClick = () => {
    if (myRef.current) {
      // 현재 참조된 DOM 요소에 접근할 수 있습니다.
      myRef.current.focus();
    }
  };

  return (
    <div>
      <input ref={myRef} type="text" placeholder="여기에 포커스 설정" />
      <button onClick={handleClick}>포커스 설정</button>
    </div>
  );
};

export default Example;

 

 

참고로 useRef는 함수 렌더링 중에 읽으려고 하면 안된다. 

이벤트핸들러(submit , onClick ),useEffect 이럴 때 써야한다.