The correct way to specify types for React.forwardRef is by using generics in the following way:
forwardRef<RefType, PropsType>((props, ref) => /* ... */);
Please note that the ordering of the generic parameters is the opposite of the ordering of the function parameters — you must first specify the ref type and then the props type.
For example, let's consider a simple <Button /> component like the following:
import React from 'react';
type ButtonProps = React.HTMLProps<HTMLInputElement>;
const Button = React.forwardRef<HTMLInputElement, ButtonProps>(
(props, ref) => <input type="button" ref={ref} {...props} />
);
For completeness sake, you could for example, use this as a child component inside another component, like so:
const Foo = () => {
const ref = React.useRef<HTMLInputElement | null>(null);
React.useEffect(() => {
console.log(ref?.current);
});
return <Button ref={ref} value="Foo" />;
};
export default Foo;
This post was published by Daniyal Hamid. Daniyal currently works as the Head of Engineering in Germany and has 20+ years of experience in software engineering, design and marketing. Please show your love and support by sharing this post.