I have a tsx file where the code is like below:
interface CommandProps {
otherStuff: string;
commandContainerRef: React.RefObject<HTMLDivElement | undefined>;
}
const getComponentProps = (): CommandProps => {
return {
otherStuff: 'stuff',
commandContainerRef: undefined,
};
};
.....
It gave me the error:
Type 'undefined' is not assignable to type 'RefObject<HTMLDivElement | undefined>'.
Then, I tired commandContainerRef: React.useRef(null), the above error is gone, but it gave me the eslint error below:
Error - React Hook "React.useRef" is called in function "getComponentProps" that is neither a React function component nor a custom React Hook function. React component names must start with an uppercase letter. React Hook names must start with the word "use". (react-hooks/rules-of-hooks)
I am wondering how to address this issue. Thanks in advance!
CodePudding user response:
React.RefObject<T> is an interface with a read-only property named current of the given type T (or null), in this case CommandProps or undefined (or null).
So, if you want commandContainerRef returned from getComponentProps to be a React.RefObject to undefined this should work:
const getComponentProps = (): CommandProps => {
return {
otherStuff: 'stuff',
commandContainerRef: { current: undefined },
};
};
Or, depending on what your precise need is, you could alternatively change commandContainerRef to:
commandContainerRef: React.RefObject<HTMLDivElement> | undefined;
Then the getComponentProps implementation in the question should work.
