【发布时间】:2017-07-08 15:23:56
【问题描述】:
我正在创建一个我希望元素类型可配置的组件。
const Col = ({ containerElement, children }) => {
return (
<containerElement>
{children}
</containerElement>
);
};
Col.defaultProps = {
containerElement: 'div'
};
所以容器元素可以是上面 defaultProps 中的元素,也可以是一个组件。
<Col containerElement={<MyComponent} />
我无法让propTypes 进行验证,我已经尝试过:
Col.propTypes = {
className: PropTypes.string,
containerElement: PropTypes.oneOf([
PropTypes.string,
PropTypes.element
]),
但它没有正确验证。
警告:失败的 propType:无效的 prop
componentClass的值div提供给Col,
【问题讨论】:
-
你传递给组件的到底是什么?如果该值确实是一个元素,那么无论如何您都不能将其用作
<containerElement>。<containerElement>是React.createElement('containerElement', ...)的语法糖。即使是字符串,'containerElement'也会传递给React.createElement,而不是变量containerElement。在担心验证错误之前,我会确保代码本身产生正确的结果(即正常工作)。 -
同意@FelixKling。您需要通过
const ContainerElement = containerElement.inner之类的方式实例化。看到这个问题:stackoverflow.com/a/39655113/504018
标签: reactjs