React 19 allows passing ref as a regular prop without forwardRef.
Before (React 18):
1const MyInput = forwardRef<HTMLInputElement, Props>((props, ref) => {2 return <input ref={ref} {...props} />;3});
After (React 19):
1function MyInput({ ref, ...props }: Props & { ref: Ref<HTMLInputElement> }) {2 return <input ref={ref} {...props} />;3}45// Usage6function App() {7 const inputRef = useRef(null);8 return <MyInput ref={inputRef} placeholder="Type..." />;9}
Ref callbacks:
1function MyComponent({ ref }) {2 return (3 <div ref={ref}>4 Content5 </div>6 );7}89// With callback ref10<MyComponent ref={(node) => console.log(node)} />
Cleanup function:
1function MyComponent({ ref }) {2 return (3 <input4 ref={(node) => {5 if (node) {6 // Setup7 node.focus();8 return () => {9 // Cleanup10 console.log("unmounted");11 };12 }13 }}14 />15 );16}
Benefits: