Какой правильный тип потока для «Comp» в этом React HOC?

export default Comp => ({ children, ...props }: { children?: Node }) => (
  <KeyboardAvoidingWrapper
    keyboardVerticalOffset = {-getBottomSpace() / 2}
    behavior = "padding"
    enabled
  >
    <Comp {...props}>{children}</Comp>
  </KeyboardAvoidingWrapper>
);

это поток кода ошибки генерирует: Отсутствует аннотация типа для Comp.Flow(InferError)

Редактировать: FlowVersion: 0.78.0 RN Версия: 0.57

Умерло ли Create-React-App?
Умерло ли Create-React-App?
В этом документальном фильме React.dev мы исследуем, мертв ли Create React App (CRA) и какое будущее ждет этот популярный фреймворк React.
Освоение React Native: Пошаговое руководство для начинающих
Освоение React Native: Пошаговое руководство для начинающих
React Native - это популярный фреймворк с открытым исходным кодом, используемый для разработки мобильных приложений. Он был разработан компанией...
В чем разница между react native и react ?
В чем разница между react native и react ?
React и React Native - два популярных фреймворка для создания пользовательских интерфейсов, но они предназначены для разных платформ. React - это...
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
Хуки React: что это такое и как их использовать
Хуки React: что это такое и как их использовать
Хуки React - это мощная функция библиотеки React, которая позволяет разработчикам использовать состояние и другие возможности React без написания...
1
0
483
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Может быть, потому что вы используете <Comp /> до того, как определили его? экспортировать Comp по умолчанию, экспортируя функцию компонента, и вы вызываете внутри него компонент, который может быть неопределенным. Может быть, сначала попробуйте это, посмотрите, ошибка исчезла или нет?

export default Comp => ({ children, ...props }: { children?: Node }) => (
  <KeyboardAvoidingWrapper
    keyboardVerticalOffset = {-getBottomSpace() / 2}
    behavior = "padding"
    enabled
  >
    <Text {...props}>{children}</Text>
  </KeyboardAvoidingWrapper>
);
Ответ принят как подходящий

Начиная с потока 0.89.0 тип, который вы хотите использовать для обернутых компонентов в HOC, — React.AbstractComponent.

Этот тип принимает два параметра типа: Config и Instance. Instance обычно можно безопасно игнорировать, а Config, хотя технически содержит оба типа Propsа такжеDefaultProps, фактически просто используется как тип Props. Таким образом, мы можем ввести практически любой компонент реакции (класс, функцию, что у вас есть) как React.AbstractComponent<Props>.

// @flow
import * as React from 'react';

export default <Props: { children: React.Node }>(
  Comp: React.AbstractComponent<Props>,
) => ({ children, ...props }: Props) => (
  //...
);

Обратите внимание, что мы добавляем граница к Propsуниверсальный, чтобы сообщить потоку, что Props всегда будет содержать свойство children типа React.Node, иначе, когда мы попытаемся извлечь children из нашего Props, поток не будет знать, что он существует.

Нуууу, так как вы работаете с react-native в более старой версии потока, вам нужно будет использовать React.ComponentType, который немного менее абстрактен (он не выполняет Instance вещи, кратко упомянутые ранее). Вот пример.

что, если моя версия потока 0.78.0?, поскольку мой реактивный натив 0.57, я не могу использовать 0.89.0 или могу?

Pooria Khodaveissi 03.03.2019 19:11

Ах, тогда вы хотите React.ComponentType. Это немного менее абстрактно, но должно соответствовать вашей цели. Я добавлю это к своему ответу.

Lyle Underwood 03.03.2019 20:41

«Я не могу использовать 0.89.0 или могу?» Я бы ответил на этот вопрос, но я действительно не знаю нативную экосистему :)

Lyle Underwood 03.03.2019 20:43

tnx lyle, полезный материал

Pooria Khodaveissi 04.03.2019 05:22

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