React: React.PropTypes.node должен принимать компонент (функцию) без сохранения состояния.

Созданный на 22 нояб. 2015  ·  3Комментарии  ·  Источник: facebook/react

Я только что заменил некоторые реагирующие компоненты, которые были определены с использованием классов es6, и теперь я получаю предупреждения о том, что мой реагирующий компонент без состояния (это просто функция), не являющийся ReactNode.

Warning: Failed propType: Invalid prop `Loader` supplied to `Picture`, expected a ReactNode.

Я проверял некоторые компоненты, используя React.PropTypes.node , но теперь мне нужно использовать PropTypes.oneOfType([ PropTypes.node, PropTypes.func ]) , что кажется немного длинным, чтобы сказать: «это может быть что угодно, что может быть отрисовано как компонент» (именно это то, что ProTypes.node должно покрывать, верно?).

Из документа

    // Anything that can be rendered: numbers, strings, elements or an array
    // (or fragment) containing these types.
    optionalNode: React.PropTypes.node,

Может стоит добавить func ? Или есть какая-то причина, по которой node также не обрабатывает func ?

Самый полезный комментарий

Можете ли вы показать, как вы использовали это? Я не думаю, что классы компонентов также должны быть действительны для node . Предполагается, что node принимает все, что может быть отображено. Классы не могут быть отображены напрямую — вы бы передали элемент с установленным типом.

Все 3 Комментарий

Как насчет добавления нового валидатора propType? Что-то типа

propTypes: {
    optionalComponent: React.PropTypes.component
}

где компонент будет иметь вид

PropTypes.oneOfType([ PropTypes.node, PropTypes.func ])

или что-то подобное. На мой взгляд, довольно опасно позволять людям передавать функции, но я не уверен, как сделать лучшую проверку. Чтение function.toString кажется гигантским хаком, который не будет работать после минификации, но это единственный известный мне вариант.

Можете ли вы показать, как вы использовали это? Я не думаю, что классы компонентов также должны быть действительны для node . Предполагается, что node принимает все, что может быть отображено. Классы не могут быть отображены напрямую — вы бы передали элемент с установленным типом.

Боже мой. Ты так прав. Я чувствую себя глупо. Я предполагаю, что я проверял что-то плохое. Извините за шум.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги