DocumentationRulesno-forward-ref

no-forward-ref

Full Name in eslint-plugin-react-x

react-x/no-forward-ref

Full Name in @eslint-react/eslint-plugin

@eslint-react/no-forward-ref

Features

🔍 🔄

Presets

  • core
  • recommended
  • recommended-typescript
  • recommended-type-checked

What it does

Disallows using React.forwardRef.

In React 19, forwardRef is no longer necessary. Pass ref as a prop instead.

forwardRef will deprecated in a future release. Learn more here.

An unsafe codemod is available for this rule.

Examples

Failing

import { forwardRef } from "react";
 
const MyInput = forwardRef(function MyInput(props, ref) {
  return <input ref={ref} {...props} />;
});
import React from "react";
 
interface MyInputProps {
  value: string;
  onChange: (value: string) => void;
}
 
const MyInput = React.forwardRef<MyInputProps, HTMLInputElement>(function MyInput(
  { value, onChange },
  ref,
) {
  return <input ref={ref} value={value} onChange={(e) => onChange(e.target.value)} />;
});

Passing

function MyInput({ ref, ...props }) {
  return <input ref={ref} {...props} />;
}
import React from "react";
 
interface MyInputProps {
  value: string;
  onChange: (value: string) => void;
}
 
function MyInput({ ref, value, onChange }: MyInputProps & { ref: React.RefObject<HTMLInputElement> }) {
  return <input ref={ref} value={value} onChange={(e) => onChange(e.target.value)} />;
}

Implementation

Further Reading