对应于 `PropTypes.element` 的 `defaultProp` 的正确值是多少?

IT技术 reactjs react-native react-proptypes
2021-05-23 19:09:27

我有一个组件,我希望接受另一个组件作为props,并渲染它。我希望传递的组件是可选的,并且在这种情况下不渲染任何内容。

以下代码完美运行:

const Component = ({ Inner }) => (
  <div style={{ borderStyle: "solid" }}>
    <Inner />
  </div>
);

Component.propTypes = {
  Inner: PropTypes.element
};

Component.defaultProps = {
  Inner: () => null
};

但是,在页面的第一次加载时,prop-types抱怨:

警告:无法丙类型:无效支柱Inner型的function供给Component,预期单个ReactElement。

我目前的解决方案是重新定义propTypeas PropTypes.oneOfType([PropTypes.element, PropTypes.func]),但这似乎完全不正确。

我的propTypedefaultProp实际上应该是什么?

沙箱中的 SSCCE

这个问题类似于If proptype of element 的默认值是什么?,但这已经接受了一个不起作用的答案,即使它确实起作用了,对我来说也没有多大帮助,因为我正在真正使用 react native。我没有以与本机react有关的方式来构建问题,就像我说的那样,我的示例有效,这只是prop-types一个大坏蛋。

1个回答

使用 elementType 的类型将解决您的问题。

Component.propTypes = {
  Inner: PropTypes.elementType
};

由于您的props是一个react组件,因此我们使用 elementType。如果你打开过 prop-types 的源代码,你会在那里找到它。

在此处输入图片说明

希望这对你有帮助。