如何在ReactJS中指定null prop类型?

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并设置defaultPropsnull.

我想要这样的东西:

// 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,这对我有用!


Tim*_*imo 8

当前版本的React似乎不支持此要求.

有关更多详细信息,请参阅React issue#2166.这个问题讨论了isRequiredOrNull除了财产的可能性isRequired.底线:

我不希望PropTypes有进一步的变化.Flow最近变得更加成熟,从我从React团队那里听到的,它是类型检查的长期解决方案.这将PropTypes置于优先级相同的"兼容性"桶中,如createClass或React addons,它们仍然受支持,但仅支持错误修正和性能改进,无需添加新功能或更改API.

换句话说,如果你需要更复杂的类型检查,使用流量来代替.


Lar*_*röm 6

可以使用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。


小智 5

好像是PropTypes.instanceOf(null)作品。

  • 反应@16.8
  • 道具类型@15.6