【问题标题】:What is the correct value for a `defaultProp` that corresponds to a `PropTypes.element`?对应于“PropTypes.element”的“defaultProp”的正确值是多少?
【发布时间】:2019-05-22 20:27:56
【问题描述】:

我有一个组件,我希望接受另一个组件作为道具,并渲染它。我希望传递的组件是可选的,在这种情况下什么也不渲染。

以下代码完美运行:

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

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

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

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

警告:失败的道具类型:提供给Componentfunction 类型的无效道具Inner,需要一个ReactElement。

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

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

SSCCE in a sandbox.

这个问题与If proptype of element what is the default? 类似,但它接受了一个不起作用的答案,即使它起作用了,这对我也没什么帮助,因为我正在使用真正的 react native。我没有以与本机反应有关的方式提出问题,就像我说的那样,我的示例有效,只是prop-types 是个大坏蛋。

【问题讨论】:

  • 您是否尝试过任何不被接受的答案?接受答案只是因为它帮助了 OP,而不是因为它是唯一的“正确”答案。
  • 是的,第二个建议手动渲染null,这与我想要的相反。第三个根本不起作用。

标签: reactjs react-native react-proptypes


【解决方案1】:

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

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

因为你的 prop 是一个 react 组件,所以我们使用 elementType。如果你曾经打开 prop-types 的源代码,你会在那里找到它。

希望对你有所帮助。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-10-21
  • 1970-01-01
  • 2023-03-21
  • 2015-06-25
  • 2020-02-07
  • 1970-01-01
  • 2013-11-20
  • 2012-03-07
相关资源
最近更新 更多