为特定的子组件反应 propTypes
React propTypes for specific children components
我有一个像这样的函数组件:
const Foo = () => <div>Hello world</div>;
现在我有另一个接受子组件的组件,但应该专门限制为 1 个或多个 Foo
组件(不允许其他组件)。
const Bar = ({ children }) => <div>{children}</div>;
如何在 Bar
上设置 propTypes
以实现此验证?
Bar.propTypes = {
children: PropTypes.oneOf([
PropTypes.arrayOf(PropTypes.node),
PropTypes.node,
]);
};
以上过于宽松,因为它会让任何组件类型作为子组件。我如何限制它只允许 Foo
?
您可以使用PropTypes.shape
Bar.propTypes = {
children: PropTypes.oneOfType([
PropTypes.shape({
type: PropTypes.oneOf([Foo]),
}),
PropTypes.arrayOf(
PropTypes.shape({
type: PropTypes.oneOf([Foo]),
})
),
]).isRequired
};
我有一个像这样的函数组件:
const Foo = () => <div>Hello world</div>;
现在我有另一个接受子组件的组件,但应该专门限制为 1 个或多个 Foo
组件(不允许其他组件)。
const Bar = ({ children }) => <div>{children}</div>;
如何在 Bar
上设置 propTypes
以实现此验证?
Bar.propTypes = {
children: PropTypes.oneOf([
PropTypes.arrayOf(PropTypes.node),
PropTypes.node,
]);
};
以上过于宽松,因为它会让任何组件类型作为子组件。我如何限制它只允许 Foo
?
您可以使用PropTypes.shape
Bar.propTypes = {
children: PropTypes.oneOfType([
PropTypes.shape({
type: PropTypes.oneOf([Foo]),
}),
PropTypes.arrayOf(
PropTypes.shape({
type: PropTypes.oneOf([Foo]),
})
),
]).isRequired
};