#reactjs #typescript #next.js
Вопрос:
Извините..
Я переслал ссылку, используя React forwardRef ниже приведен код y:
interface PropsDummy {}
const ProfileMenu = forwardRef<HTMLInputElement, PropsDummy>((props, ref) => {
console.log(ref.current);
}
но почему это вызывает ошибку машинописи?
Property 'current' does not exist on type '((instance: HTMLInputElement | null) => void) | MutableRefObject<HTMLInputElement | null>'
но если я использую псевдоним этого текущего объекта, он отлично работает без ошибки машинописи
interface PropsDummy {}
const ProfileMenu = forwardRef<HTMLInputElement, PropsDummy>((props, ref) => {
const myRef = ref as React.RefObject<HTMLInputElement>;
console.log(myRef.current);
}
как получить текущий объект без ошибки машинописи?
Спасибо
Ответ №1:
Причина, по которой это не работает, заключается в том, что тип for ForwardedRef
определяется как:
type ForwardedRef<T> = ((instance: T | null) => void) | MutableRefObject<T | null> | null;
Поэтому попытка простого доступа .current
без какой-либо проверки типов не сработает , потому что функции не обладают таким свойством.
Это сработало, когда вы привели объект к ожидаемому типу, но обратите внимание, что ссылки могут быть либо функцией, либо объектом (или нулем!), поэтому вам следует проверить это, прежде чем пытаться получить доступ к current
свойству.
Это должно сработать:
const ProfileMenu = forwardRef<HTMLInputElement, PropsDummy>((props, forwardedRef) => {
if (forwardedRef != null amp;amp; typeof forwardedRef !== 'function') {
console.log(forwardedRef.current);
}
return (
<div className="App" ref={forwardedRef}>
<h1>Hello there</h1>
</div>
);
});