React + Typescript — ошибки ввода ссылок

Я видел много других вопросов с той же проблемой, что и моя, и я пробовал все решения, но это не работает. У меня есть форма со многими входными данными, которую я настроил в FloatingLabelInputs. У них есть общедоступный метод под названием resetState, который я хочу вызвать. Вот как выглядит мой компонент с формой:

class EditModalPage extends React.Component<Props, State> {
  fieldsRefs: React.RefObject<FloatingLabelInput>[] = fields.map(() => React.createRef());

  render() {
    return fields.map((fieldData, index) => (
      <FloatingLabelInput
        name = {fieldData.name}
        ref = {this.fieldRefs[index]}
      />
    ));
  }
}

const fields = [
  { name: 'test' }
];

Из того, что я видел в других вопросах, это должно работать, так как я ввел свойство fieldsRefs, используя React.RefObject. Однако это не так, и TypeScript выдает мне следующую ошибку:

Type 'RefObject<FloatingLabelInput>' is not assignable to type 'string | (string & ((instance: HTMLInputElement | null) => void)) | (string & RefObject<HTMLInputElement>) | (RefObject<FloatingLabelInput> & string) | (RefObject<FloatingLabelInput> & ((instance: HTMLInputElement | null) => void)) | ... 5 more ... | undefined'.
  Type 'RefObject<FloatingLabelInput>' is not assignable to type '((instance: FloatingLabelInput | null) => void) & RefObject<HTMLInputElement>'.
    Type 'RefObject<FloatingLabelInput>' is not assignable to type '(instance: FloatingLabelInput | null) => void'.
      Type 'RefObject<FloatingLabelInput>' provides no match for the signature '(instance: FloatingLabelInput | null): void'.

Однако если я попытаюсь console.info(this.fieldsRefs), все работает. Я просто получаю сообщение об ошибке и вынужден использовать as any.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
4
0
7 196
2

Ответы 2

Вы должны проверить интерфейс props для компонента <FloatingLabelInput />: кажется, что он требует ref типа RefObject<HtmlInputElement>, а вы пытаетесь дать ему RefObject<FloatingLabelInput>.

Вы должны попробовать изменить тип с React.RefObject<FloatingLabelInput> на React.RefObject<HtmlInputElement>

Вообще-то, нет. Я хочу получить ссылку на FloatingLabelInput, так как у него есть общедоступный метод, к которому мне нужно получить доступ. У меня такая же проблема с другими компонентами...

Matheus Grieger 27.03.2019 17:41

Попробуйте этот тип: React.MutableRefObject<HTMLInputElement | null>

Другие вопросы по теме