我刚刚替换了一些使用 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
吗?
添加新的 propType 验证器怎么样? 就像是
propTypes: {
optionalComponent: React.PropTypes.component
}
其中组件的形式为
PropTypes.oneOfType([ PropTypes.node, PropTypes.func ])
或类似的东西。 在我看来,让人们传入函数是非常危险的,但我不确定如何进行更好的验证。 阅读function.toString
似乎是一个巨大的 hack,它在缩小后不起作用,但这是我知道的唯一选择。
你能展示一下你是如何使用它的吗? 我认为组件类也不应该对node
有效。 node
应该接受任何可以渲染的东西。 类不能直接呈现 - 您将传递一个具有类型集的元素。
我的天啊。 你说的太对了。 我觉得我好笨。 我想我是在用不好的方式验证某些东西。 对不起,噪音。
最有用的评论
你能展示一下你是如何使用它的吗? 我认为组件类也不应该对
node
有效。node
应该接受任何可以渲染的东西。 类不能直接呈现 - 您将传递一个具有类型集的元素。