일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 확률
- Prefix Sums
- 소수
- 포토샵
- 통신사할인
- pandas
- series
- Photoshop
- CSS
- 백준
- Flexbox
- c
- 에라토스테네스의 체
- c++
- 알고리즘
- Design Pattern
- skt membership
- 상태
- Javascript
- spring
- grid
- align-items
- margin
- SK바이오사이언스
- Codility
- Gap
- dataframe
- 강화학습
- 수학
- stl
Archives
- Today
- Total
sliver__
[React] useRef props (react 18 vs 19) 본문
728x90
1. 개요
React 18과 19에서는 useRef를 props로 넘길 때 동작 방식에 차이가 있다.
React 19에서는 forwardRef 없이도 ref를 직접 props로 전달할 수 있도록 변경되었다.
이 차이를 이해하면 마이그레이션 시 발생할 수 있는 문제를 예방할 수 있다.
2. React 18에서의 동작 방식
React 18에서는 부모 컴포넌트가 자식 컴포넌트의 DOM 요소나 메서드에 접근하기 위해 forwardRef를 반드시 사용해야 했다.
import { useRef, forwardRef } from "react";
const ChildComponent = forwardRef((props, ref) => {
return <input ref={ref} />;
});
function ParentComponent() {
const inputRef = useRef(null);
return <ChildComponent ref={inputRef} />;
}
forwardRef를 사용하지 않으면 ref가 일반적인 props로 전달되어 동작하지 않았다.
3. React 19에서의 변경 사항
React 19부터는 forwardRef 없이도 함수형 컴포넌트에서 ref를 직접 props로 받아 사용할 수 있다.
import { useRef } from "react";
const ChildComponent = ({ ref }) => {
return <input ref={ref} />;
};
function ParentComponent() {
const inputRef = useRef(null);
return <ChildComponent ref={inputRef} />;
}
이제 ref를 일반적인 props처럼 직접 전달할 수 있으며, forwardRef 없이도 원하는 동작을 수행할 수 있다.
4. 주요 차이점 정리
버전useRef를 props로 직접 전달forwardRef 필요 여부
React 18 | 불가능 | 필수 |
React 19 | 가능 | 불필요 |
React 19에서는 forwardRef 없이도 ref를 props로 넘길 수 있으므로, 기존 코드를 마이그레이션할 때 이를 고려하여 수정하는 것이 좋다.
5. 결론
- React 18에서는 forwardRef를 사용하지 않으면 ref가 정상적으로 동작하지 않았다.
- React 19부터는 forwardRef 없이도 ref를 직접 props로 전달할 수 있다.
- 마이그레이션 시 forwardRef를 제거할 수 있는 부분이 있는지 확인하면 더욱 간결한 코드 작성이 가능하다.
- ref를 올바르게 전달하는 패턴을 따르면 React 19에서도 안정적인 코드 작성을 할 수 있다.
728x90
'Frontend > React' 카테고리의 다른 글
[React] Context + useReducer (0) | 2025.04.06 |
---|---|
[React] Context API + useReducer (0) | 2025.04.06 |
[React] useRef (0) | 2025.02.16 |
[React] StrictMode (0) | 2025.02.15 |
[React] tailwind 설치 & TrobuleShooting (0) | 2025.02.15 |
Comments