2017-07-26 59 views
4

我如何验证提供的道具是一个组件类(不是实例)?React propTypes组件类?

例如

export default class TimelineWithPicker extends React.PureComponent { 

    static propTypes = { 
     component: PropTypes.any, // <-- how can I validate that this is a component class (or stateless functional component)? 
    }; 

    render() { 
     return (
      <this.props.component {...this.props} start={this.state.start}/> 
     ); 
    } 
} 

回答

13

你要使用PropTypes.element。其实...... PropType.func适用于无状态功能组件和类组件。

我已经制作了一个沙盒来证明这个工作原理......考虑到我一开始给你提供了错误的信息,这是需要的。非常抱歉!

加工sandbox example

这里是在链接的情况下测试的代码都死:

import React from 'react'; 
import { render } from 'react-dom'; 
import PropTypes from "prop-types"; 

class ClassComponent extends React.Component { 
    render() { 
    return <p>I'm a class component</p> 
    } 
} 

const FSComponent =() => (
    <p>I'm a functional stateless component</p> 
); 

const Test = ({ ClassComponent, FSComponent }) => (
    <div> 
    <ClassComponent /> 
    <FSComponent /> 
    </div> 
); 
Test.propTypes = { 
    ClassComponent: PropTypes.func.isRequired, 
    FSComponent: PropTypes.func.isRequired 
} 

render(<Test 
     ClassComponent={ ClassComponent } 
     FSComponent={ FSComponent } />, document.getElementById('root')); 
+1

也可以使用'oneOfType'为不同的类型:'PropTypes.oneOfType([...])' – btzr

+0

这不是一个实例?我认为''(又名'React.createElement(Foo,null)')是一个反应元素,而我想检查原始'Foo'。 – mpen

+0

不能:)有一个单独的PropType。 –