use*_*710 17 javascript null nullable reactjs immutable.js
我有一个ReactJS组件的支柱,它是null或不可变映射.
如果我写的话,在我的小部件的底部:
MyComponent.propTypes = {
myMap: React.PropTypes.instanceOf(Immutable.Map)
};
Run Code Online (Sandbox Code Playgroud)
我将这个开放留给null,undefined或Map的可能性.
如何才能使这个必需,并且只能为null或map类型?
https://facebook.github.io/react/docs/typechecking-with-proptypes.html
我看到这个例子,但我不知道如何根据我的需要定制语法,或者是否可能.
编辑:如果属性为null,那么它仍然存在但未定义意味着它没有被完全包含.
例如:
<Component id={1} data={null} />
<Component id={2} data={Immutable.Map()} />
<Component id={3} />
Run Code Online (Sandbox Code Playgroud)
kam*_*myl 12
我有类似的问题,这就是我来到这里的方式。我找到了一个对我来说足够好的解决方案,所以我不妨分享一下。
简而言之,我删除.isRequired并设置defaultProps为null.
我想要这样的东西:
// this won't work, because `PropTypes.null` doesn't exists!
MyComponent.propTypes = {
item: PropTypes.oneOfType([ItemPropTypesShape, PropTypes.null]).isRequired,
};
// this also won't work!
MyComponent.propTypes = {
item: PropTypes.oneOfType([ItemPropTypesShape, PropTypes.instanceOf(null)]).isRequired,
};
Run Code Online (Sandbox Code Playgroud)
当需要 prop 时,null 总是被视为错误。
我最终这样做了:
MyComponent.propTypes = {
item: ItemPropTypesShape,
};
MyComponent.defaultProps = {
item: null,
};
Run Code Online (Sandbox Code Playgroud)
如果我们只有 PropTypes,这对我有用!
当前版本的React似乎不支持此要求.
有关更多详细信息,请参阅React issue#2166.这个问题讨论了isRequiredOrNull除了财产的可能性isRequired.底线:
我不希望PropTypes有进一步的变化.Flow最近变得更加成熟,从我从React团队那里听到的,它是类型检查的长期解决方案.这将PropTypes置于优先级相同的"兼容性"桶中,如createClass或React addons,它们仍然受支持,但仅支持错误修正和性能改进,无需添加新功能或更改API.
换句话说,如果你需要更复杂的类型检查,使用流量来代替.
可以使用PropTypes.oneOf([null]).isRequired。它应该允许为null,并且别无其他。您可以将其与任何其他类型结合使用:
PropTypes.oneOfType([
PropTypes.string.isRequired,
PropTypes.oneOf([null]).isRequired,
]).isRequired
Run Code Online (Sandbox Code Playgroud)
编辑:当我使用prop-types 15.7.2给空道具时,我只是这个prop类型对我失败了,所以我不确定这是否可以工作了(如果曾经可以呢?)。我恢复到只通过不使用isRequired来允许同时使用undefined和null。
| 归档时间: |
|
| 查看次数: |
10884 次 |
| 最近记录: |