PropTypes.node выдает неожиданную ошибку несоответствия в React - PullRequest
1 голос
/ 03 февраля 2020

Я определил класс следующим образом:

import { Popup } from 'semantic-ui-react'

const FamilyLink = ({ family, fields, PopupClass = Popup }) => React.createElement(PopupClass, {...})

FamilyLink.propTypes = {
  PopupClass: PropTypes.node,
}

Popup из semantic-ui-react - это React Component: https://github.com/Semantic-Org/Semantic-UI-React/blob/62d2feda4c89bb604ab39e3ae5d44f4b78769e7b/src/modules/Popup/Popup.js

Затем в другом компоненте Я назвал FamilyLink так:

class PopupWithModal extends React.PureComponent {...}

<FamilyLink family={family} fields={FAMILY_FIELDS} PopupClass={PopupWithModal} />

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

https://reactjs.org/docs/typechecking-with-proptypes.html#proptypes

Однако ни PropTypes.node, ни PropTypes.elementType не работают, но только PropTypes.func выдает ошибку в console:

Предупреждение: сбой PropType: Недопустимый проп PopupClass, поставляемый FamilyLink, ожидаемый ReactNode

Почему это так? Я понимаю, что и Component, и PureComponent являются функциями, которые можно увидеть здесь:

https://github.com/facebook/react/blob/0cf22a56a18790ef34c71bef14f64695c0498619/packages/react/src/ReactBaseClasses.js

Однако я бы предпочел PropTypes ограничить Мой входной параметр только для компонента React, а не для любых других произвольных функций. Кроме того, насколько я понимаю, он должен работать.

Обновление

Если мы обновим его до PropTypes.elementType, мы получим следующую ошибку:

Предупреждение: сбойный тип пропуска: FamilyLink: тип пропуска PopupClass недопустим; это должна быть функция, обычно из пакета prop-types, но полученная undefined

С PropTypes.func не дает каких-либо ошибок .

...