【发布时间】:2018-05-03 11:07:10
【问题描述】:
我有一个 React 组件,它获取一个配置对象作为道具,它看起来像这样:
{
active: true,
foo: {
bar: 'baz'
}
}
在某些情况下,我想通过使用 active: false 传入不同的对象来禁用组件显示的功能,如下所示:
{
active: false
}
这很好用,不是问题。
但是,我还想确保使用我的组件的客户端代码提供正确的配置对象:
- 如果 active 为 true,则需要 foo
- 如果 active 为 false,则 foo 是可选的,不需要提供
如何为这种情况定义道具类型?
我试过了:
MyComponent.propTypes = {
config: PropTypes.oneOf([
{
active: false
},
PropTypes.shape({
active: true,
foo: PropTypes.shape({
bar: PropTypes.string.isRequired
})
}).isRequired
]).isRequired
};
但这给了我以下警告:
警告:失败的道具类型:无效的道具
config提供给[object Object]的MyComponent,应为 [{"active":true},null] 之一。在我的组件中
我知道为什么这不起作用:这是因为 PropTypes.oneOf 不希望动态 prop 类型匹配器作为值,而只是一个有效参数的数组。
问题是,有没有办法做到这一点?
我制作了一个可运行的沙盒示例,您可以在其中试用上面的示例代码:https://codesandbox.io/s/n9o0wl5zlj
【问题讨论】:
-
查看github.com/thejameskyle/react-required-if - 看起来它可以满足您的需求。
-
????很酷,行得通,谢谢!