如何最好地定义propType以接受组件作为道具?

Jim*_*lla 5 reactjs

鉴于这个人为的例子,最佳定义是什么? componentType什么?

const componentType = PropTypes.oneOfType([
    PropTypes.shape({render: PropTypes.func.isRequired}), // React.createClass / React.Component ...better way to describe?
    PropTypes.func,                                       // Stateless function
    // others?
]);

const Selector = React.createClass({

    propTypes: {
        components: PropTypes.arrayOf(componentType).isRequired,
        index:      PropTypes.number.isRequired,
    },

    render() {
        const Component = this.props.components[this.props.index];
        return (
            <Component />
        );
    }
});
Run Code Online (Sandbox Code Playgroud)

PropTypes.node不是我在找; 它的用法如下:

<Selector components={[<ThingA  />, <ThingB  />]} />
Run Code Online (Sandbox Code Playgroud)

而我想要的东西看起来像:

<Selector components={[ThingA, ThingB]} />
Run Code Online (Sandbox Code Playgroud)

我想传递类型,而不是实例.

Jim*_*lla 8

我转发到github并得到了这个答案.所以它应该是:

const componentType = PropTypes.oneOfType([PropTypes.string, PropTypes.func])
Run Code Online (Sandbox Code Playgroud)

func涵盖"经典"反应组件,ES6类和无状态功能组件的类型.string涵盖原生元素案例(例如"div").


mad*_*dav 5

这似乎是最新的:/sf/answers/3904918321/

太长了;

const propTypes = {
    component: PropTypes.elementType,
    requiredComponent: PropTypes.elementType.isRequired,
};
Run Code Online (Sandbox Code Playgroud)