React Warning: Failed prop type: Invalid prop of type 'Object` предоставлен

Я получаю предупреждение: «Предупреждение: сбойный тип опоры: недопустимая опора типа Object предоставлена, ожидаемый экземпляр bound checkType».

Это мои проптипы:

FieldTable.propTypes = {
    rawData: PropTypes.instanceOf(PropTypes.object).isRequired,
    percentCols: PropTypes.arrayOf(PropTypes.string).isRequired,
    specialColNames: PropTypes.instanceOf(PropTypes.object).isRequired,
    scenarioHeaders: PropTypes.instanceOf(PropTypes.object),
    headerHierarchies: PropTypes.arrayOf(PropTypes.object).isRequired
};

Что это за «связанный checkType», о котором идет речь, и как мне проверять свои свойства объекта, чтобы избежать этого предупреждения? Сами объекты представляют собой объекты JSON, полученные из асинхронных вызовов и сгенерированные в других компонентах. Например, объект rawData поступает из компонента, который позволяет пользователю загружать электронную таблицу Excel, а затем анализирует электронную таблицу в объект JSON. Не знаю, полезная это информация или нет.

Спасибо за любую помощь и особенно за любые более глубокие обсуждения, которые могут возникнуть в связи с этим вопросом.


person Kaboukie    schedule 17.10.2018    source источник
comment
Я должен добавить, что я нахожусь под правилами строкового eslint, поэтому я не могу использовать простой PropTypes.object.isRequired, поскольку это вызовет правило реагировать / запрещать-проп-типы.   -  person Kaboukie    schedule 18.10.2018


Ответы (2)


Для объекта, когда включен react/forbid-prop-types eslint, попробуйте использовать формы:

plainObj: PropTypes.shape({ subProp: PropTypes.string })
person Gatsbimantico    schedule 19.10.2018
comment
Это исправило! Спасибо за предложение! - person Kaboukie; 20.10.2018

Чтобы проверить proptypes простых объектов JS, вы должны использовать просто:

plainObj: PropTypes.object.isRequired,
person Igor Buts    schedule 17.10.2018
comment
К сожалению, это не пройдет через правило eslint моей компании о типах реакции / запрета, так что это не лучшее решение для моего случая. - person Kaboukie; 18.10.2018