본문 바로가기

기술스택/Next.js

[React 19] useRef

`useRef` 훅은 렌더링에 필요하지 않은 값을 참조하게 해주는 훅이다.

 

useRef는 초기값을 넣어주어야 하는데, 이는 참조할 객체의 속성을 선언하는 것이다. 이니셜 렌더링 후에는 무시된다.

 

import { useRef } from 'react';

function MyComponent() {
  const intervalRef = useRef(0);
  const inputRef = useRef(null);
  // ...

 

이 훅은 `current`를 리턴하는데, 처음에는 선언 당시에 전달한 초기값이고, 나중에 다른 값으로 설정할 수 있다.

참조하는 객체를 JSX 노드에 ref attribute로 React에 전달하면 React는 current 프로퍼티로 설정해준다.

 

import { useRef } from "react";

export default function Counter() {
  let ref = useRef(0);

  function handleClick() {
    ref.current = ref.current + 1;
    alert(`${ref.current}번 클릭하였습니다.`);
 }

  return (
    <button onClick={handleClick}>
      Click me!
    </button>
  );
}

 

이 코드는 `useRef`의 초기값으로 0을 선언하고, 버튼을 클릭할 때마다 `ref.current`에 직접 1을 더해서 그 값을 저장한다.

 

import { useRef } from "react";

function MyComponent() {
  const inputRef = useRef(null);
  // ...
  return <input type="file" ref={inputRef} />
}

 

이렇게 DOM에 직접 전달할 수도 있는데, 이러한 경우 DOM을 직접 컨트롤할 수 있다.

 

import { useRef } from "react";

export default function Form() {
  const inputRef = useRef(null);

  function handleClick() {
    inputRef.current.click();
  }

  return (
    <>
      <input type="file" ref={inputRef} />
      <button onClick={handleClick}>
        Attach File
      </button>
    </>
  );
}

 

`handleClick` 함수는 `inputRef`의 `current`를 받아서 클릭하게 한다. 그러면 파일을 첨부하는 윈도우가 나타난다.

 

타입스크립트를 사용하는 경우 처음에 `null`로 선언하였기 때문에 `null-safety(?)`를 적용해 주어야 한다.